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
答案 0 :(得分:0)
也许您只想使用此选项
-fno-ident
忽略#ident
指令。
也许这会关闭警告。