混合C/C++编译时向g++传递多-std选项的问题问询
解决G编译C/C混合代码时的标准版本警告问题
要消除这类跨语言的标准选项警告,核心是利用GCC命令行选项的顺序生效特性——-std选项会作用于后续所有编译单元,直到遇到新的-std选项或语言切换指令(-x)。我们可以把对应语言的标准选项精准放在该语言编译单元的前面,避免无效选项的警告。
修改后的编译命令
g++ -fprofile-arcs -ftest-coverage -std=c++20 XYZ_utest.cpp \ -x c -std=c17 XYZ_stub.c \ XYZ.c \ <more options> \ -g -o XYZ_utest
原理说明
- 先在C测试文件
XYZ_utest.cpp前添加-std=c++20,该选项仅作用于这个C编译单元,不会影响后续C文件。 - 用
-x c切换到C语言模式后,紧接着添加-std=c17,这个选项只会作用于后面的.c文件(XYZ_stub.c和XYZ.c),不会回溯影响前面的C++代码。 - 每个
-std选项都匹配了对应的语言类型,GCC自然不会再抛出“选项对某语言无效”的警告。
额外注意点
- 切换到C语言后,后续的
.c文件会自动沿用C编译模式,无需重复写-x c。 - 通用编译选项(比如
-fprofile-arcs、-g)可以放在命令开头,它们对C和C++都有效。
内容的提问来源于stack exchange,提问作者Gerhardh
相关产品推荐
相关产品推荐

