VS CODE中C/C++的Clang-format的使用

一、说明

Clang-format是一个功能强大的格式化工具。

在vs code通过C/C++扩展后即可使用Clang-format工具进行代码的格式化。

其自带的排版格式主要有:LLVM, Google, Chromium, Mozilla, WebKit等; 利用style参数配置。

通过编写 .clang-format 文件,可以实现代码风格的配置。

二、设置

1、安装c/c++扩展

2、打开vs code设置,选择默认的格式化器

 3、找到扩展中的C/C++中的Formattng

(1)选择默认的格式化引擎

(2)可以通过绝对路径选择格式化模板文件,也可以选择file为工程目录的模板文件

 tips:模板文件.clang-format文件必须是UTF-8格式存储的.

other: 我使用的格式化配置

---
# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
Language:        Cpp
# BasedOnStyle:  LLVM
# 访问说明符(public、private等)的偏移
AccessModifierOffset: -4
# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
AlignAfterOpenBracket: Align
# 对齐数组列
AlignArrayOfStructures: Left
# 连续赋值时,对齐所有等号
AlignConsecutiveAssignments:
  Enabled:          true
  AcrossEmptyLines: false
  AcrossComments:   false
  AlignCompound:    true
  PadOperators:     true
# 对齐连续位字段
AlignConsecutiveBitFields:
  Enabled:         true
  AcrossEmptyLines: false
  AcrossComments:  false
  AlignCompound:   false
  PadOperators:    false
# 对齐连续宏定义
AlignConsecutiveDeclarations:
  Enabled:         false
  AcrossEmptyLines: false
  AcrossComments:  false
  AlignCompound:   false
  PadOperators:    false
# 对齐连续宏定义
AlignConsecutiveMacros:
  Enabled:         true
  AcrossEmptyLines: false
  AcrossComments:  false
  AlignCompound:   true
  PadOperators:    true
  # 左对齐逃脱换行(使用反斜杠换行)的反斜杠
AlignEscapedNewlines: Left
# 水平对齐二元和三元表达式的操作数
AlignOperands:   Align
# 对齐连续的尾随的注释
AlignTrailingComments: true
# 允许下一行的所有参数
AllowAllArgumentsOnNextLine: true
# 允许函数声明的所有参数在放在下一行
AllowAllParametersOfDeclarationOnNextLine: true
# 允许短的枚举放在同一行
AllowShortEnumsOnASingleLine: true
# 允许短的块放在同一行
AllowShortBlocksOnASingleLine: Never
# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: false
# 允许短的函数放在同一行
AllowShortFunctionsOnASingleLine: All
# 允许短的匿名函数放在同一行
AllowShortLambdasOnASingleLine: All
# 允许短的if语句保持在同一行
AllowShortIfStatementsOnASingleLine: Never
# 允许短的循环保持在同一行
AllowShortLoopsOnASingleLine: false
# 总是在定义返回类型之后中断
AlwaysBreakAfterDefinitionReturnType: None
# 总是在返回类型后换行
AlwaysBreakAfterReturnType: None
# 总是在多行string字面量前换行
AlwaysBreakBeforeMultilineStrings: false
# 总是在template声明后换行
AlwaysBreakTemplateDeclarations: MultiLine
AttributeMacros:
  - __capability
# false表示函数实参要么都在同一行,要么都各自一行
BinPackArguments: true
# false表示所有形参要么都在同一行,要么都各自一行
BinPackParameters: true
# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效
BraceWrapping:
  AfterCaseLabel:  false
  AfterClass:      false
  AfterControlStatement: Never
  AfterEnum:       false
  AfterFunction:   false
  AfterNamespace:  false
  AfterObjCDeclaration: false
  AfterStruct:     false
  AfterUnion:      false
  AfterExternBlock: false
  BeforeCatch:     false
  BeforeElse:      false
  BeforeLambdaBody: false
  BeforeWhile:     false
  IndentBraces:    false
  SplitEmptyFunction: true
  SplitEmptyRecord: true
  SplitEmptyNamespace: true
# 在二元运算符前换行
BreakBeforeBinaryOperators: None
# 在concept前换行
BreakBeforeConceptDeclarations: true
# 在大括号前换行: Attach(始终将大括号附加到周围的上下文)
BreakBeforeBraces: Allman
BreakBeforeInheritanceComma: false
# 继承列表样式
BreakInheritanceList: AfterComma
# 在三元运算符前换行
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
# 构造函数初始值设定项换行样式
BreakConstructorInitializers: BeforeComma
# 在java字段的注释后换行
BreakAfterJavaFieldAnnotations: false
# 格式化时允许中断字符串字面量
BreakStringLiterals: true
# 每行字符的限制,0表示没有限制
ColumnLimit:     0
# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变
CommentPragmas:  '^ IWYU pragma:'
# 不同的排列说明符和限定符的方法(例如const/volatile)
QualifierAlignment: Leave
# 在新行上声明每个命名空间
CompactNamespaces: false
# 构造函数的初始化列表的缩进宽度
ConstructorInitializerIndentWidth: 4
# 延续的行的缩进宽度
ContinuationIndentWidth: 4
# 去除C++11的列表初始化的大括号{后和}前的空格
Cpp11BracedListStyle: true
# 继承最常用的换行方式
DeriveLineEnding: true
# 继承最常用的指针和引用的对齐方式
DerivePointerAlignment: false
# 关闭格式化
DisableFormat:   false
# 删除访问修饰符后的所有空行
EmptyLineAfterAccessModifier: Never
# 仅当访问修饰符开始一个新的逻辑块时才添加空行
EmptyLineBeforeAccessModifier: LogicalBlock
# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)
ExperimentalAutoDetectBinPacking: false
# 要使用的包构造函数初始化式样式
PackConstructorInitializers: BinPack
BasedOnStyle:    ''
ConstructorInitializerAllOnOneLineOrOnePerLine: false
AllowAllConstructorInitializersOnNextLine: true
# 自动补充namespace注释
FixNamespaceComments: true
# 需要被解读为foreach循环而不是函数调用的宏
ForEachMacros:
  - foreach
  - Q_FOREACH
  - BOOST_FOREACH
IfMacros:
  - KJ_IF_MAYBE
# 多个#include块合并在一起并排序为一个
IncludeBlocks:   Preserve
# 可以定义负数优先级从而保证某些#include永远在最前面
IncludeCategories:
  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
    Priority:        2
    SortPriority:    0
    CaseSensitive:   false
  - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
    Priority:        3
    SortPriority:    0
    CaseSensitive:   false
  - Regex:           '.*'
    Priority:        1
    SortPriority:    0
    CaseSensitive:   false
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
# 缩进访问修饰符
IndentAccessModifiers: true
# 缩进case标签
IndentCaseLabels: true
# case 标签后面的块使用与 case 标签相同的缩进级别
IndentCaseBlocks: false
# 缩进goto标签。
IndentGotoLabels: true
# 缩进预处理器指令
IndentPPDirectives: None
# 向后兼容缩进外部块
IndentExternBlock: AfterExternBlock
# 缩进模板中的requires子句
IndentRequires:  false
# 缩进宽度
IndentWidth:     4
# 函数返回类型换行时,缩进函数声明或函数定义的函数名
IndentWrappedFunctionNames: false
# 插入尾随逗号
InsertTrailingCommas: None
# 保留JavaScript字符串引号
JavaScriptQuotes: Leave
# 包装 JavaScript 导入/导出语句
JavaScriptWrapImports: true
# 保留在块开始处的空行
KeepEmptyLinesAtTheStartOfBlocks: true
# 相对于 lambda 签名对齐 lambda 主体
LambdaBodyIndentation: Signature
# 开始一个块的宏的正则表达式
MacroBlockBegin: ''
# 结束一个块的宏的正则表达式
MacroBlockEnd:   ''
# 连续空行的最大数量
MaxEmptyLinesToKeep: 1
# 命名空间的缩进
NamespaceIndentation: Inner
ObjCBinPackProtocolList: Auto
# 使用ObjC块时缩进宽度
ObjCBlockIndentWidth: 4
ObjCBreakBeforeNestedBlockParam: true
# 在ObjC的@property后添加一个空格
ObjCSpaceAfterProperty: false
# 在ObjC的protocol列表前添加一个空格
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakOpenParenthesis: 0
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PenaltyIndentedWhitespace: 0
# 指针的对齐: Left, Right, Middle
PointerAlignment: Right
# 缩进预处理器语句的列数
PPIndentWidth:   -1
# 引用的对齐
ReferenceAlignment: Pointer
# 允许重新排版注释
ReflowComments:  true
RemoveBracesLLVM: false
RequiresClausePosition: OwnLine
SeparateDefinitionBlocks: Leave
# 短命名空间跨越的最大展开行数
ShortNamespaceLines: 1
# 允许排序#include
SortIncludes:    Never
# java静态导入放在非静态导入之前
SortJavaStaticImport: Before
# 对using声明排序
SortUsingDeclarations: true
# 在C风格类型转换后添加空格
SpaceAfterCStyleCast: false
# 在!后添加空格
SpaceAfterLogicalNot: false
# 在Template关键字后添加空格
SpaceAfterTemplateKeyword: true
# 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true
# 不在case冒号之前添加空格
SpaceBeforeCaseColon: false
# 不在C++11大括号列表之前添加空格
SpaceBeforeCpp11BracedList: false
# 在构造函数初始化器冒号之前添加空格
SpaceBeforeCtorInitializerColon: true
# 在继承冒号前添加空格
SpaceBeforeInheritanceColon: true
# 开圆括号之前添加一个空格: Never, ControlStatements, Always
SpaceBeforeParens: ControlStatements
SpaceBeforeParensOptions:
  AfterControlStatements: true
  AfterForeachMacros: true
  AfterFunctionDefinitionName: false
  AfterFunctionDeclarationName: false
  AfterIfMacros:   true
  AfterOverloadedOperator: false
  AfterRequiresInClause: false
  AfterRequiresInExpression: false
  BeforeNonEmptyParentheses: false
# 不要确保指针限定符周围有空格,而是使用 PointerAlignment
SpaceAroundPointerQualifiers: Default
# 在基于范围的for循环冒号之前添加空格
SpaceBeforeRangeBasedForLoopColon: true
# {}中间不添加空格
SpaceInEmptyBlock: false
# 在空的圆括号中添加空格
SpaceInEmptyParentheses: false
# 在尾随的评论前添加的空格数(只适用于//)
SpacesBeforeTrailingComments: 1
# 在尖括号的<后和>前添加空格
SpacesInAngles:  Never
# 不在if/for/switch/while条件周围插入空格
SpacesInConditionalStatement: false
# 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格
SpacesInContainerLiterals: true
# 在C风格类型转换的括号中添加空格
SpacesInCStyleCastParentheses: false
# 行注释开头允许有多少个空格。要禁用最大值,请将其设置为-1,除此之外,最大值优先于最小值
SpacesInLineCommentPrefix:
  Minimum:         1
  Maximum:         -1
# 在圆括号的(后和)前添加空格
SpacesInParentheses: false
# 在方括号的[后和]前添加空格,lamda表达式和未指明大小的数组的声明不受影响
SpacesInSquareBrackets: false
# 不在[前添加空格
SpaceBeforeSquareBrackets: false
# 位域:每边都添加空格
BitFieldColonSpacing: Before
# 标准
Standard:        Auto
# 在语句前面被忽略的宏定义,就好像它们是一个属性一样
StatementAttributeLikeMacros:
  - Q_EMIT
# 应该被解释为完整语句的宏定义
StatementMacros:
  - Q_UNUSED
  - QT_REQUIRE_VERSION
# tab宽度
TabWidth:        4
# 使用\n换行
UseCRLF:         false
# 使用tab字符:ForIndentation——仅将制表符用于缩进
UseTab:          ForIndentation
# 对空格敏感的宏定义
WhitespaceSensitiveMacros:
  - STRINGIZE
  - PP_STRINGIZE
  - BOOST_PP_STRINGIZE
  - NS_SWIFT_NAME
  - CF_SWIFT_NAME
...

 配置说明参考: Clang-Format Style Options — Clang 16.0.0git documentation

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: VS Code是一款非常流行的集成开发环境(IDE),它支持多种编程语言,包括C语言。在VS Code编写C语言的DLL(动态链接库)非常简便。下面是一些基本步骤: 1. 安装VS Code和C/C++扩展:首先,确保你已经成功安装了VS Code,并在扩展市场搜索并安装C/C++扩展。这个扩展提供了C语言编写所需的各种功能和工具。 2. 创建C文件:在VS Code使用Ctrl+N或者点击"文件"->"新建文件"来创建一个新的C文件。将其保存为.c文件,例如"mydll.c"。 3. 编写C代码:在新创建的C文件,开始编写你的C代码。这里你可以编写DLL所需的任何函数和逻辑。确保你按照C语言的语法规则来编写代码。 4. 生成DLL:完成代码编写后,可以使用某些编译器或者GCC(GNU编译器集合)来生成DLL文件。如果你已经在系统上安装了GCC,可以在VS Code的终端使用相应的命令行,例如"gcc -shared -o mydll.dll mydll.c"来生成DLL文件。 5. 调试代码:VS Code还提供了强大的调试功能。你可以使用调试器来逐步调试你的DLL代码,以发现和解决潜在的问题。 6. 示例代码: ```c #include <stdio.h> #include <windows.h> // DLL的导出函数 __declspec(dllexport) int add(int a, int b) { return a + b; } // DLL的入口函数 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: // 在DLL加载时执行的代码 break; case DLL_PROCESS_DETACH: // 在DLL卸载时执行的代码 break; case DLL_THREAD_ATTACH: // 在新线程创建时执行的代码 break; case DLL_THREAD_DETACH: // 在线程终止时执行的代码 break; } return TRUE; } ``` 总之,使用VS Code编写C语言的DLL非常方便。只需安装相应的扩展,创建和编写C代码,并使用编译器生成DLL文件即可。 ### 回答2: 在VsCode编写C语言的DLL(动态链接库),首先需要安装相关的插件来支持C语言的开发。我们可以使用"C/C++"插件和"Code Runner"插件。 步骤如下: 1. 在VsCode的扩展栏搜索并安装"C/C++"插件和"Code Runner"插件。 2. 打开一个新的文件夹作为你的工作目录,点击“文件”然后选择“打开文件夹”,选择你的工作目录。 3. 在工作目录创建一个名为`main.c`的文件,用于编写你的C代码。 4. 在`main.c`文件编写你需要导出的函数。通过使用`__declspec(dllexport)`关键字,你可以指定需要导出的函数。例如,编写一个简单的示例函数如下: ```c #include <stdio.h> __declspec(dllexport) int add(int a, int b) { return a + b; } ``` 5. 保存`main.c`文件。 6. 打开“终端”窗口(快捷键是 `Ctrl + `),运行以下命令来编译生成DLL文件: ``` gcc -shared -o mydll.dll main.c ``` 这将在工作目录生成一个名为`mydll.dll`的DLL文件。 7. 将生成的DLL文件放置在你需要使用它的项目目录。 现在,你可以在其他C语言项目使用该DLL文件。只需在你的C代码包含该DLL的头文件,并调用其的函数即可。例如,在另一个C代码文件,可以这样使用该DLL的函数: ```c #include <stdio.h> int main() { // 调用DLL的函数 int result = add(2, 3); printf("Result: %d\n", result); return 0; } ``` 以上就是使用VsCode编写C语言的DLL的基本步骤。你可以根据需要编写更复杂的代码,并对DLL进行更多的配置和优化。希望对你有所帮助! ### 回答3: VS Code 是一款功能强大的文本编辑器,它支持多种编程语言,包括 C 语言。在 VS Code 编写 C 语言 DLL(动态链接库)可以通过以下步骤完成: 1. 安装 C/C++ 扩展:在 VS Code 点击左侧的扩展图标,搜索并安装名为 "C/C++" 的扩展。该扩展提供了对 C 语言的语法高亮、代码智能提示、代码格式化等功能。 2. 创建工作区:在 VS Code 的菜单栏选择 "文件" -> "打开文件夹",选择一个文件夹作为工作区。在该文件夹下创建一个新的文件夹,作为 C DLL 项目的根目录。 3. 创建 C 文件:在项目根目录下创建一个以 ".c" 为扩展名的 C 文件。这个文件将包含 DLL 的源代码。 4. 编写代码:在 C 文件编写 DLL 的代码。DLL 是一个动态链接库,可以被其他程序调用。代码要包含合适的函数和导出声明,以供其他程序使用。可以使用 C 的标准库函数和其他自定义函数。 5. 配置编译任务:在 VS Code 的菜单栏选择 "查看" -> "终端",打开终端窗口。在终端运行 "gcc"(或其他 C 语言编译器)命令编译 DLL 代码。可以按照编译器的要求指定输出文件名、编译参数等。 6. 编译并生成 DLL:在终端输入命令并执行,将代码编译为 DLL 文件。如果没有错误,将在项目根目录生成 DLL 文件,可以通过其他程序调用该 DLL。 完成以上步骤后,就可以使用 VS Code 编写并生成 C 语言 DLL。注意,这里只是提供了基本的步骤,具体的代码实现和编译参数需要根据具体需求和开发环境进行调整。在编写和编译过程可能会出现错误,可以通过调试和查阅相关文档来解决问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huskiey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值