使用make -j并行编译时,A.cpp的GCC诊断#pragma是否影响其他文件?
问题解答
不会,你添加的#pragma GCC diagnostic系列指令只会作用于A.cpp文件本身,完全不会影响some_other_file_with_no_pragma.cpp的编译过程,哪怕用make -j并行编译也一样。
具体原因:
- GCC的这类
#pragma诊断指令是单个编译单元(.cpp文件)级别的局部设置,push/ignore/pop的作用范围被严格限定在当前文件的代码块内,每个.cpp文件在编译时都是独立的上下文,彼此完全隔离。 make -j只是启动多个并行的编译进程,每个进程负责处理一个单独的源文件,进程之间的内存、编译状态互不共享,不存在跨文件的设置泄露。
你可以简单验证:如果some_other_file_with_no_pragma.cpp里存在未使用参数的代码,编译时依然会触发-Wunused-parameter警告,而A.cpp中被pragma包裹的代码则不会出现该警告。
内容的提问来源于stack exchange,提问作者idk_what_Im_doing
相关产品推荐
相关产品推荐

