在工程目录下创建 _clang-format 文件,是 clang-format 代码格式化工具的配置文件。
使用该格式化配置文件需要安装Xcode插件:BBUncrustifyPlugin-Xcode,也可通过 Xcode 插件管理器 Alcatraz 搜索进行安装。或者安装另一款插件 ClangFormat-Xcode。

以下对 _clang-format 文件配置进行逐行解释:

  • AccessModifierOffset: 0
    类的访问修饰关键字(private,public,protected···)缩进
  • AlignAfterOpenBracket: true
    在未封闭(括号的开始和结束不在同一行)的括号中的代码是否对齐
  • AlignEscapedNewlinesLeft: false
    在(),[],{}中代码不少于一行且换行情况下。如果true则,第二行起代码会尽量向左对齐,否则向最右边对齐
  • AlignOperands: true
    如果为true,水平对齐二元和三元表达式的操作数。
  • AlignTrailingComments: true
    如果为true,对齐各行尾部注释
  • AllowAllParametersOfDeclarationOnNextLine: true
    如果为true,函数申明多个参数时,允许换行
  • AllowShortBlocksOnASingleLine: false
    如果true,较短的代码片段允许格式化为一行
  • AllowShortCaseLabelsOnASingleLine: false
    是否允许短switch的case 语句在一行写完
  • AllowShortIfStatementsOnASingleLine: false
    是否允许短if else语句在一行写完
  • AllowShortLoopsOnASingleLine: false
    是否允许短的循环在一行写完
  • AllowShortFunctionsOnASingleLine: All
    是否允许短的方法实现在一行写完
  • AlwaysBreakAfterDefinitionReturnType: false
    定义函数返回类型之后换行
  • AlwaysBreakTemplateDeclarations: false
    定义模板之后换行
  • AlwaysBreakBeforeMultilineStrings: false
    多行字符串之前换行
  • BreakBeforeBinaryOperators: None
    二元操作符之前换行
  • BreakBeforeTernaryOperators: true
    三元操作符之前换行
  • BreakConstructorInitializersBeforeComma: false
    在构造函数初始化时按逗号断行,并以冒号对齐
  • BinPackParameters: true
    如果false,函数的定义或声明的参数要么是全部占同一行,要么一个参数占一行
  • BinPackArguments: true
    如果false,函数调用时的参数要么是全部占同一行,要么一个参数占一行
  • ColumnLimit: 160
    一行代码长度的限制,0为无限制
  • ConstructorInitializerAllOnOneLineOrOnePerLine: false
    如果true,构造函数的初始化无法适应于一行以内,那么每个参数占一行
  • ConstructorInitializerIndentWidth: 4
    构造函数初始化的缩进值
  • DerivePointerAlignment: false
    如果true,将用使用PointerAlignment的值为指针类型进行格式化
  • ExperimentalAutoDetectBinPacking: false
    如果true,clang-format检测方法的定义和调用是否被格式化为一个参数占据一行
  • IndentCaseLabels: false
    case语句的位置总是在switch语句后缩进一级
  • IndentWrappedFunctionNames: false
  • IndentFunctionDeclarationAfterType: false
    If true, indent when breaking function declarations which are not also definitions after the type
  • MaxEmptyLinesToKeep: 2
    持续空行的最大数量
  • KeepEmptyLinesAtTheStartOfBlocks: true
    如果true,在一块代码前的空行将会被保留
  • NamespaceIndentation: None
    namespace的缩进
    NI_None 所有的namespace均不缩进
    NI_Inner 只在内部namespace缩进
    NI_All 所有的namespace缩进
  • ObjCBlockIndentWidth: 4
    OC的block缩进宽度
  • ObjCSpaceAfterProperty: false
    OC的property后空格是否存在,如果true,那么@property(readonly) 代替 @property (readonly)
  • ObjCSpaceBeforeProtocolList: true
    OC中协议列表前的空格是否存在,如果true,那么 Person 代替 Person
  • PenaltyBreakBeforeFirstCallParameter: 19
  • PenaltyBreakComment: 300
  • PenaltyBreakString: 1000
  • PenaltyBreakFirstLessLess: 160
  • PenaltyExcessCharacter: 1000000
    最多能超出ColumnLimit多少个字符
  • PenaltyReturnTypeOnItsOwnLine: 60
  • PointerAlignment: Right
    指针在类型那边还是在变量名那边还是在中间
  • SpacesBeforeTrailingComments: 1
    单行注释前的空格数
  • Cpp11BracedListStyle: true
    如果true,将大括号的列表格式化为最适合C++11的格式
  • Standard: Cpp11
    按照改Cpp11格式化 A> 代替 A >
  • IndentWidth: 4
    缩进的列数
  • TabWidth: 4
    制表位列数
  • UseTab: Never
    是否使用tab进行缩进
  • BreakBeforeBraces: Attach
    括号的断行模式,此处为括号紧贴代码片段
  • SpacesInParentheses: false
    如果true,在非空的括号中插入空格
  • SpacesInSquareBrackets: false
    如果true,[]中间插入空格
  • SpacesInAngles: false
    如果true,在<>中间插入空格
  • SpaceInEmptyParentheses: false
    如果true 空括号中加空格
  • SpacesInCStyleCastParentheses: false
  • SpaceAfterCStyleCast: false
  • SpacesInContainerLiterals: true
    是否在容器字面量(@[@”1”,@”2”])中插入空格
  • SpaceBeforeAssignmentOperators: true
    在=号前加空格
  • ContinuationIndentWidth: 4
    在续行(下一行)时的缩进长度
  • CommentPragmas: ‘^ IWYU pragma:’
    一个描述特殊意义的正则表达式。
  • ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
    A vector of macros that should be interpreted as foreach loops instead of as function calls
  • SpaceBeforeParens: ControlStatements
    是否在括号前加上空格,此处只是在控制语句之前添加(if/while/for…)
  • DisableFormat: false
    禁用当前format文件

参考文档:http://clang.llvm.org/docs/ClangFormatStyleOptions.html