-Wno-cpp 是一个 GCC(GNU 编译器) 的编译选项,用来控制对 #warning 或 #error 指令中 # 注释的警告显示。
🌟 简单解释:
在 C/C++ 代码中,有时候我们会看到这样的宏定义或注释:
#warning This feature is not fully implemented!
#error This part should not be compiled!
这些是 预处理指令,不是运行时的错误或警告,而是编译前(预处理阶段)提示开发者的。
而 -Wcpp(注意是没有 no 的版本)这个选项会让编译器在碰到这样的 #warning 或 #error 时,给出 额外的警告信息。
所以:
-Wcpp:启用对#warning和#error的警告提示(默认是启用的)。-Wno-cpp:关闭对这些的警告提示。
✅ 举个例子:
假设你有一段代码:
#warning "This is a test warning"
-
默认情况下(或用
-Wcpp),编译时你会看到类似这样的输出:file.c:1:2: warning: #warning "This is a test warning" [-Wcpp] -
如果加上
-Wno-cpp,就不会提示这个警告了。
🔧 在嵌入式开发中的作用
在嵌入式开发中,很多库或 HAL 代码中会写 #warning 提示开发者注意一些事情,比如:
#warning "Using default clock config, make sure to override it!"
这些提示有用,但也可能会 刷屏或者影响构建清晰度。如果你已经确认这些提示不重要了,就可以通过 -Wno-cpp 把它们关掉,保持编译输出干净。
🔚 总结一句话:
-Wno-cpp是用来关闭编译期间对#warning/#error指令产生的警告信息,让编译器“少说点话”。
你想要保留提醒就不要加这个选项,想要“安静一点”就加上它~
这个 cpp 其实是 C PreProcessor 的缩写,也就是 “C 预处理器”。
🧠 什么是 C 预处理器?
在 C/C++ 编译流程中,预处理(preprocessing) 是编译的第一个阶段。
预处理器主要处理:
#include头文件包含#define宏定义- 条件编译(
#if/#ifdef/#else/#endif) - 还有我们刚才说的
#warning和#error等等
这些都是在正式编译前进行的。
所以 -Wcpp(或 -Wno-cpp)中的 cpp,就是指的 预处理阶段的警告(warnings from the C PreProcessor)。
💡 顺便一提
很多系统里的 C 预处理器程序就是一个叫 cpp 的可执行文件,比如你可能在 /usr/bin/cpp 看到它 —— 它就是预处理器。
✅ 总结一下:
cpp= C PreProcessor-Wcpp就是 “对 预处理器发出的警告 开启警告输出”-Wno-cpp则是 “不要输出这些预处理器的警告”



















