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

时间:2015-04-24 19:29:49

标签: c++ clang++ llvm-clang

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

__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=
  3. 这样,我的所有来源都不受静态分析工具的影响

    ...谢谢

1 个答案:

答案 0 :(得分:1)

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

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

详情here,以及摆脱误报的其他想法。