對.clang-format的部分注釋
對.clang-Format的部分注釋
知識淺薄,還有許多未理解之處,歡迎各位糾正、討論。
clang-Format簡介
Clang-Format可用于格式化(排版)多種不同語言的代碼。我們編寫時需要注意代碼的格式,通過該工具能夠很好的管理代碼格式。clang-format,它是基于clang的一個命令行工具,能夠自動化格式:C、C++、Object-C代碼,支持多種代碼風格:Google、Chromium、LLVM、Mozilla、WebKit。也支持自定義風格(通過編寫.clang-format文件)很方便的統一代碼格式。
如果你使用Visual Studio Code編寫代碼(我當前用來編寫C++),VSCode的C/C++插件自帶了Clang-Format格式化工具,不僅擁有上述5種排版格式,還定義了自己的Visual Studio排版格式,且此格式是默認的排版格式(Ubuntu下格式化快捷鍵:Ctrl+Shift+I,Windows下格式化快捷鍵:Shift+Alt+F),VS Code格式化的具體內容可以參考官網:鏈接
配置文件說明
# 語言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto Language: Cpp # BasedOnStyle: Google # 訪問說明符(public、private等)的偏移 AccessModifierOffset: -1 # 開括號(開圓括號、開尖括號、開方括號)后的對齊: Align, DontAlign, AlwaysBreak(總是在開括號后換行) AlignAfterOpenBracket: Align # 連續賦值時,對齊所有等號 AlignConsecutiveAssignments: false # 連續聲明時,對齊所有聲明的變量名 AlignConsecutiveDeclarations: false # 左對齊逃脫換行(使用反斜杠換行)的反斜杠 換行時反斜杠位置:左對齊 AlignEscapedNewlines: Left # 水平對齊二元和三元表達式的操作數 AlignOperands: true # 對齊連續的尾隨的注釋 AlignTrailingComments: true # 允許函數聲明的所有參數在放在下一行 AllowAllParametersOfDeclarationOnNextLine: true # 允許短的塊放在同一行 AllowShortBlocksOnASingleLine: false # 允許短的case標簽放在同一行 AllowShortCaseLabelsOnASingleLine: false # 允許短的函數放在同一行: None,InlineOnly(定義在類中),empty(空函數),Inline(定義在類中,空函數),all AllowShortFunctionsOnASingleLine: All # 允許短的if語句保持在同一行 AllowShortIfStatementsOnASingleLine: true # 允許短的循環保持在同一行 AllowShortLoopsOnASingleLine: true # 總是在返回類型后換行(deprecated) AlwaysBreakAfterDefinitionReturnType: None # 總是在返回類型后換行: None, All, TopLevel(頂級函數,不包括在類中的函數), # AllDefinitions(所有的定義,不包括聲明), TopLevelDefinitions(所有的頂級函數的定義) AlwaysBreakAfterReturnType: None # 總是在多行string字面量前換行 AlwaysBreakBeforeMultilineStrings: true # 總是在template聲明后換行 AlwaysBreakTemplateDeclarations: Yes # false表示函數實參要么都在同一行,要么都各自一行 BinPackArguments: true # false表示所有形參要么都在同一行,要么都各自一行 BinPackParameters: true # 大括號換行,只有當BreakBeforeBraces設置為Custom時才有效 # 在大括號前換行: Attach(始終將大括號附加到周圍的上下文), Linux(除函數、命名空間和類定義,與Attach類似), # Mozilla(除枚舉、函數、記錄定義,與Attach類似), Stroustrup(除函數定義、catch、else,與Attach類似), # Allman(總是在大括號前換行), GNU(總是在大括號前換行,并對于控制語句的大括號增加額外的縮進), WebKit(在函數前換行), Custom # 注:這里認為語句塊也屬于函數 BraceWrapping: # class定義后面 AfterClass: false # 控制語句后面 AfterControlStatement: false # enum定義后面 AfterEnum: false # 函數定義后面 (OC無效) AfterFunction: false # 命名空間定義后面 AfterNamespace: false # ObjC定義后面 AfterObjCDeclaration: false # Struct結構體定義后面 AfterStruct: false # Union定義后面 AfterUnion: false # Extern 定義后面 AfterExternBlock: false # Catch之前 BeforeCatch: false # Else之前 BeforeElse: false # 縮進大括號 IndentBraces: false # false 時,空方法體 {} 放在一行 SplitEmptyFunction: true # false 時,空記錄(例如,類,結構或聯合){} 放在一行 SplitEmptyRecord: true # false 且 AfterNamespace == true 時 空命名空間體可放到一行: {} SplitEmptyNamespace: true # 在二元運算符前換行: None(在操作符后換行), NonAssignment(在非賦值的操作符前換行), All(在操作符前換行) BreakBeforeBinaryOperators: None # 在大括號前換行: Attach(始終將大括號附加到周圍的上下文), Linux(除函數、命名空間和類定義,與Attach類似), # Mozilla(除枚舉、函數、記錄定義,與Attach類似), Stroustrup(除函數定義、catch、else,與Attach類似), # Allman(總是在大括號前換行), GNU(總是在大括號前換行,并對于控制語句的大括號增加額外的縮進), WebKit(在函數前換行), Custom # 注:這里認為語句塊也屬于函數 BreakBeforeBraces: Attach # 繼承列表的逗號前換行 BreakBeforeInheritanceComma: false # 在構造函數的初始化列表的逗號前換行 BreakInheritanceList: BeforeColon # 在三元運算符前換行 BreakBeforeTernaryOperators: true # 在構造函數的初始化列表的逗號前換行 BreakConstructorInitializersBeforeComma: false # 初始化列表前換行 BreakConstructorInitializers: BeforeColon # Java注解后換行 在Java文件中的字段上的每個注釋之后中斷。 BreakAfterJavaFieldAnnotations: false # 允許打破當格式化字符串。 BreakStringLiterals: true # Java注解后換行 每行字符的限制,0表示沒有限制 ColumnLimit: 120 # 描述具有特殊意義的注釋的正則表達式,它不應該被分割為多行或以其它方式改變 CommentPragmas: '^ IWYU pragma:' # 緊湊 命名空間 CompactNamespaces: false # 構造函數的初始化列表要么都在同一行,要么都各自一行 ConstructorInitializerAllOnOneLineOrOnePerLine: true # 構造函數的初始化列表的縮進寬度 ConstructorInitializerIndentWidth: 4 # 延續的行的縮進寬度 ContinuationIndentWidth: 2 # 去除C++11的列表初始化的大括號{后和}前的空格 Cpp11BracedListStyle: true # 繼承最常用的指針和引用的對齊方式 DerivePointerAlignment: false # 關閉格式化 DisableFormat: false # 自動檢測函數的調用和定義是否被格式為每行一個參數(Experimental) ExperimentalAutoDetectBinPacking: false # 固定命名空間注釋 FixNamespaceComments: true # 需要被解讀為foreach循環而不是函數調用的宏 ForEachMacros: # - foreach - Q_FOREACH - BOOST_FOREACH IncludeBlocks: Preserve # 對#include進行排序,匹配了某正則表達式的#include擁有對應的優先級,匹配不到的則默認優先級為INT_MAX(優先級越小排序越靠前), # 可以定義負數優先級從而保證某些#include永遠在最前面 # include 分組排序方式 Preserve(按組排序) Merge(合并成一組排序)Regroup(按 IncludeCategories 重新分組排序) IncludeCategories: - Regex: '^
vscode clang-format插件的使用
首先安裝Clang-Format插件。
在“首選項”->“設置”中修改Clang-format: Executable的位置為實際位置,一般插件放置于D:\Users\xxx.vscode\extensions\ms-vscode.cpptools-x.xx.x\LLVM\bin目錄下,這里需要指定到可執行文件,例如:D:\Users\jaron.vscode\extensions\ms-vscode.cpptools-0.29.0\LLVM\bin\clang-format.exe
設置C_Cpp: Clang_format_style和C_Cpp: Clang_format_fallback Style的值為file,可以指定從workspace目錄中使用.clang-format文件。
將.clang-format文件拷貝到對應的工程目錄下。
在打開的源代碼下執行Alt + Shift + F即可格式化源代碼,或者右鍵選擇“格式化文檔”。
命令行
用自定義配置格式化代碼
/clang-format.exe --assume-filename=E:/test/.clang-format -i E:/test/src/main.c,指定.clang-format格式文件
或
clang-format.exe -style=file -i E:/test/src/main.c,會從當前目錄查找.clang-format格式文件,找不到就向上一層目錄尋找,再上一層……直到找到為止。
用內置配置格式化代碼,這里指定Webkit
clang-format.exe -style=Webkit -i D:/test/src/main.c
命令行導出特定風格的配置文件(以Webkit為例)
clang-format.exe -dump-config -style=Webkit >.clang-format
以上即為本篇的所有內容,因學識與能力有限,如有不足之處,請多多包涵與指教!
MindSpore 昇騰
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。