You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:01:37