clang-format是否支持-fno-operator-names选项?
clang-format是否支持类似-fno-operator-names的选项处理运算符别名关键字?
C++为||、&&等二元运算符提供了or、and等关键字别名。在GCC和Clang编译器中,可通过-fno-operator-names选项禁用这些别名,使其不被视为关键字,比如允许定义名为xor的函数。但在无对应选项时,用Mozilla风格的clang-format格式化代码会出现异常:
当前格式化输出:
int xor () { return 1; } int g() { return 2; }
期望的格式化结果:
int xor() { return 1; } int g() { return 2; }
补充说明:已知xor是保留关键字,但现有代码通过-fno-operator-names编译器选项将xor用作函数名,仅需对这类代码进行格式化。
回答
clang-format没有专门对应-fno-operator-names的独立配置选项,但可以通过传递编译器兼容参数让它正确识别这类标识符,具体有两种方式:
- 在.clang-format配置文件中添加编译选项
在项目的.clang-format文件里,基于Mozilla风格添加CompileFlags配置,传递-fno-operator-names:
BasedOnStyle: Mozilla Language: Cpp CompileFlags: Add: [-fno-operator-names]
- 调用clang-format时直接指定编译选项
通过--compile-options参数传递该选项:
clang-format --style=Mozilla --compile-options="-fno-operator-names" 你的代码文件.cpp
两种方式都能让clang-format将xor识别为普通函数名,按照Mozilla风格完成正确格式化。
内容的提问来源于stack exchange,提问作者jonicho
相关产品推荐
相关产品推荐

