如何有条件地在宏中包含#ident指令?

时间:2011-10-03 18:18:39

标签: c gcc macros c-preprocessor

gcc-4.4中的错误导致#ident指令发出警告。我们不允许在编译器中使用警告(-Werror),所以我需要在某些GCC编译器版本上编译时关闭它们。 (见Best replacement for GCC #ident

$ echo '#ident "FAILS on gcc-4.3.3"' > test.c
$ gcc-4.4 -c test.c
test.c:1: warning: #ident is a deprecated GCC extension

由于这些在几个位置发生,我想用一个宏来替换它们,这些宏会有条件地在那些“​​坏”编译器上或者用实际的#ident指令发出任何东西(或近似#ident的东西)在所有其他人。理想情况下,这样的事情:

# test2.c
#ifndef HAS_HASH_IDENT
#  define IDENT(x) //-- NO-OP
#else
#  define IDENT(x) #ident x
#endif

这不起作用,因为预处理器在#的{​​{1}}上窒息,因为它在宏中使用时被解释为stringize运算符。

#ident

我尝试了几种宏重定向技巧,但我想出的任何内容都不会满足预处理器。

这样的事情是否可能?


注意:$ gcc-4.5 -Wall -E test2.c test2.c:4:22: error: '#' is not followed by a macro parameter 指令由预处理器完整地传递给编译器,因此我遇到的问题是受到某种预处理器递归限制的限制。

#ident

1 个答案:

答案 0 :(得分:0)

也许您只想使用此选项

  

-fno-ident        忽略#ident指令。

也许这会关闭警告。