對.clang-format的部分注釋

      網友投稿 1248 2025-03-31

      對.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: '^' Priority: 2 - Regex: '^<.*\.h>' Priority: 1 - Regex: '^<.*' Priority: 2 - Regex: '.*' Priority: 3 # 指定正則表達式file-to-main-include映射中允許的后綴。 IncludeIsMainRegex: '([-_](test|unittest))?$' # 縮進case標簽 case 是否縮進一級 IndentCaseLabels: true # 預處理代碼縮進樣式。None(不縮進)AfterHash(縮進) IndentPPDirectives: None # 縮進寬度 IndentWidth: 2 # 函數返回類型換行時,縮進函數聲明或函數定義的函數名 IndentWrappedFunctionNames: false # JS 引號樣式 Leave("",'') Single("") Double("") JavaScriptQuotes: Leave # JS import 是否需要換行 JavaScriptWrapImports: true # 保留在塊開始處的空行(OC 沒用) KeepEmptyLinesAtTheStartOfBlocks: false # 開始一個塊的宏的正則表達式 MacroBlockBegin: '' # 結束一個塊的宏的正則表達式 MacroBlockEnd: '' # 連續空行的最大數量 MaxEmptyLinesToKeep: 1 # 命名空間的縮進: None, Inner(縮進嵌套的命名空間中的內容), All NamespaceIndentation: None # OC 協議根據 ColumnLimit 長度換行 實現內部縮進寬度 ObjCBinPackProtocolList: Never # 使用ObjC塊時縮進寬度 使用 OC block 函數實現內部縮進寬度 ObjCBlockIndentWidth: 2 # 在ObjC的@property后添加一個空格 ObjCSpaceAfterProperty: false # 在ObjC的protocol列表前添加一個空格 ObjCSpaceBeforeProtocolList: true PenaltyBreakAssignment: 2 PenaltyBreakBeforeFirstCallParameter: 1 # 在一個注釋中引入換行的penalty PenaltyBreakComment: 300 # 第一次在<<前換行的penalty PenaltyBreakFirstLessLess: 120 # 在一個字符串字面量中引入換行的penalty PenaltyBreakString: 1000 # 對于每個在行字符數限制之外的字符的penalty PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 # 將函數的返回類型放到它自己的行的penalty PenaltyReturnTypeOnItsOwnLine: 200 # 指針和引用的對齊: Left, Right, Middle PointerAlignment: Right #RawStringFormats: # - Delimiter: pb # Language: TextProto # BasedOnStyle: google # 允許重新排版注釋 RawStringFormats: # 允許排序#include - Language: Cpp Delimiters: - cc - CC - cpp - Cpp - CPP - 'c++' - 'C++' CanonicalDelimiter: '' BasedOnStyle: google - Language: TextProto Delimiters: - pb - PB - proto - PROTO EnclosingFunctions: - EqualsProto - EquivToProto - PARSE_PARTIAL_TEXT_PROTO - PARSE_TEST_PROTO - PARSE_TEXT_PROTO - ParseTextOrDie - ParseTextProtoOrDie CanonicalDelimiter: '' BasedOnStyle: google ReflowComments: true SortUsingDeclarations: true # 在C風格類型轉換后添加空格 SpaceAfterCStyleCast: false # template 模板關鍵字后面添加空格 SpaceAfterTemplateKeyword: true # 在賦值運算符之前添加空格 SpaceBeforeAssignmentOperators: true # 開圓括號之前添加一個空格: Never, ControlStatements, Always 初始化 c++ 11 對象的前面空格 # 初始化 c++ 11 對象的前面空格 SpaceBeforeCpp11BracedList: false # 構造函數:前加空格 SpaceBeforeCtorInitializerColon: true # 繼承的:前面加空格 SpaceBeforeInheritanceColon: true # 開圓括號之前添加一個空格: Never, ControlStatements, Always SpaceBeforeParens: ControlStatements # false 清除 for 循環:前面的空格 for (auto v : values) {} SpaceBeforeRangeBasedForLoopColon: true # 在空的圓括號中添加空格 SpaceInEmptyParentheses: false # 在尾隨的評論前添加的空格數(只適用于//) SpacesBeforeTrailingComments: 2 # 在尖括號的<后和>前添加空格 < int > SpacesInAngles: false # 在容器(ObjC和JavaScript的數組和字典等)字面量中添加空格 # 快捷數組 內部加空格 [ 1, 2, 3 ]; :前加空格 f({a : 1, b : 2, c : 3}); SpacesInContainerLiterals: true # 在C風格類型轉換的括號中添加空格 SpacesInCStyleCastParentheses: false # 在圓括號的(后和)前添加空格 SpacesInParentheses: false # 在方括號的[后和]前添加空格,lamda表達式和未指明大小的數組的聲明不受影響 SpacesInSquareBrackets: false # 標準: Cpp03, Cpp11, Auto Standard: Auto StatementMacros: - Q_UNUSED - QT_REQUIRE_VERSION # tab寬度 TabWidth: 2 # 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always UseTab: Never SortIncludes: false

      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

      對.clang-format的部分注釋

      以上即為本篇的所有內容,因學識與能力有限,如有不足之處,請多多包涵與指教!

      MindSpore 昇騰

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:發掘理想的工資管理合作伙伴
      下一篇:營銷甘特圖模板excel(甘特圖免費模板)
      相關文章
      亚洲欧美日韩综合久久久| 亚洲午夜精品在线| 亚洲午夜成人精品无码色欲| 亚洲欧洲国产综合| 亚洲黄色片在线观看| 亚洲狠狠久久综合一区77777| 亚洲国产a∨无码中文777| 久久久久国产亚洲AV麻豆| 久久乐国产精品亚洲综合| 亚洲国产午夜中文字幕精品黄网站| 亚洲AV无码精品国产成人| 亚洲色www永久网站| 亚洲成在人线aⅴ免费毛片| 无码亚洲成a人在线观看| 最新亚洲人成无码网www电影| 亚洲欧美日韩中文二区| 亚洲国产午夜精品理论片在线播放| 亚洲欧洲专线一区| 亚洲爆乳成av人在线视菜奈实| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲日韩AV一区二区三区四区| 亚洲乱码无人区卡1卡2卡3| 亚洲欧美综合精品成人导航| 亚洲av无码专区在线电影 | 亚洲综合在线视频| 久久久亚洲裙底偷窥综合| 亚洲日韩乱码中文无码蜜桃 | 国产亚洲成在线播放va| 亚洲国产精品国产自在在线| 久久亚洲色一区二区三区| 中文字幕人成人乱码亚洲电影| 国产亚洲综合网曝门系列| 久久久久无码精品亚洲日韩 | 亚洲色欲或者高潮影院| 亚洲日本视频在线观看| 国产亚洲福利在线视频| 日韩色日韩视频亚洲网站 | 亚洲最大的黄色网| 亚洲av日韩专区在线观看| 亚洲国产成人久久综合野外| 色噜噜亚洲精品中文字幕 |