-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
则是 “不要输出这些预处理器的警告”