说Clang 之前必须先说GCC。
GCC,即GNU(Gnu's Not Unix)编译器套装(GNU Compiler Collection,GCC),是GNU开发的一套编程语言编译器。它是以GPL及LGPL许可证所发行的自由软件,也是GNU项目的关键部分。GCC,特别是其中的C语言编译器,也常被认为是跨平台编译器的事实标准。
Clang是一个C、C++、Objective-C语言的轻量级编译器。它采用了底层虚拟机(LLVM)作为其后端。它的目标是提供一个GNU编译器套装(GCC)的替代品。比较GCC,它的优势是编译速度快,内存占用小,兼容GCC。同时可满足多样的客户需求(代码重构,动态分析,代码生成等),允许集成到各种IDE中。
当然实际工作中也没少用微软的VC编译器,即MSVC,但它的名气明显比不过Clang 和GCC,此处跳过,不用介绍了。
回到 Clang 的安装目录,bin目录下有个工具叫 clang-format.exe,它可以用来格式化代码,统一我们团队的代码格式。而里面的配置文件.clang-format非常重要,说明如下:
# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
Language: Cpp
# 访问说明符(public、private等)的偏移
AccessModifierOffset: -4
# 连续赋值时,等号对齐
AlignConsecutiveAssignments: true
# define 换行时反斜杠位置:左对齐
AlignEscapedNewlines: Left
# 连续代码的尾部注释对齐
AlignTrailingComments: true
# 允许短代码块放在同一行 if 1 { return; }
AllowShortBlocksOnASingleLine: false
# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: false
# 允许短的函数放在同一行
AllowShortFunctionsOnASingleLine: All
# 允许短的if语句保持在同一行
AllowShortIfStatementsOnASingleLine: false
# 允许短的循环保持在同一行
AllowShortLoopsOnASingleLine: false
# 总是在返回类型后换行
AlwaysBreakAfterReturnType: None
# 总是在多行string字面量前换行
AlwaysBreakBeforeMultilineS