在旧版GCC中使用-Wno-implicit-fallthrough为何未触发错误?
为什么GCC 4.8.4不识别
-Wno-implicit-fallthrough却不报错? 这其实是GCC刻意设计的兼容性特性——它会默默忽略不认识的警告类命令行选项,而不是直接终止编译。具体原因可以拆解成这几点:
- GCC的向后兼容策略:对于
-W或-Wno-开头的警告控制选项,旧版本遇到自己不认识的选项时,默认只会输出一个非常不起眼的警告(如果没开启详细警告输出,可能根本看不到),然后继续编译流程。所以GCC 4.8.4看到-Wno-implicit-fallthrough这个没见过的选项时,直接跳过了,不会触发编译错误。 - 如何验证这个行为:如果你想让旧版本GCC对不认识的警告选项报错,可以加上
-Werror=unknown-warning-option编译选项。这时GCC 4.8.4遇到-Wno-implicit-fallthrough就会抛出错误,终止编译。 - 额外补充:这种设计是为了方便编写跨版本的编译脚本——你可以在脚本里统一添加新版本GCC需要的警告抑制选项,旧版本不会因为这些陌生选项而罢工,极大提升了编译脚本的兼容性。当然,对于那些会影响编译核心逻辑的选项(比如错误的优化级别),GCC还是会直接报错的,只有警告类的选项会被忽略。
内容的提问来源于stack exchange,提问作者jmd_dk
相关产品推荐
相关产品推荐

