Clang Diagnostics,如何忽略编译器特定的扩展

Clang Diagnostics, how to ignore compiler specific extensions

我的生产代码是在带有一些语言扩展的专有编译器上编译的,例如:

__even_in_range(TA2IV, TA2IV_TAIFG);

但是我使用 clang 作为代码分析工具,并得到这个错误 error: use of undeclared identifier '__even_in_range'。产生类似行为的语言扩展很少。有没有办法让 clang 忽略某些标识符?

编辑: 这两条评论都引导我定义解决方案,因此我将这些编译器选项添加到代码分析包中(我使用 https://github.com/lvzixun/Clang-Complete 包)。

  1. -D __even_in_range(y,x)=y
  2. -D __interrupt=

这样 none 我的来源受到静态分析工具的影响

谢谢...

您可以使用预定义的宏 __clang_analyzer__ 来识别分析器正在 运行,并且在这种情况下只 #define 那些扩展:

#ifdef __clang_analyzer__
#define __even_in_range(...)
...
#endif

详细信息 here,以及消除误报的其他想法。