如何让GCC对所有宏重定义(无论定义是否相同)发出警告?
GCC宏重定义的严格警告配置
GCC手册中有如下说明:
如果宏被重定义为与原定义实质不同的内容,预处理器会发出警告并使用新定义。**如果新定义与原定义实质相同,重定义会被静默忽略。**例如,这允许两个不同头文件定义同一个公共宏,仅当定义不匹配时预处理器才会报错。
当需要让GCC对所有宏重定义(即使新旧定义内容完全一致)都发出警告时,可以使用-Wmacro-redefined编译选项。
示例代码
#define TEST 1 #define TEST 1 int main(void) { return 0; }
使用gcc -Wall -Wextra -Wpedantic编译上述代码时不会产生警告,但添加-Wmacro-redefined选项后即可触发警告:
编译命令
gcc -Wmacro-redefined test.c
警告输出示例
test.c:2:9: warning: macro 'TEST' redefined [-Wmacro-redefined] 2 | #define TEST 1 | ^~~~ test.c:1:9: note: previous definition of 'TEST' was here 1 | #define TEST 1 | ^~~~
需要注意的是,-Wmacro-redefined并不包含在-Wall、-Wextra或-Wpedantic中,必须显式指定才能启用该严格检查。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

