【发布时间】:2021-03-29 14:01:39
【问题描述】:
我需要禁用某个头文件中的所有警告,并且只禁用该文件。
我的编译器版本是g++-4.8。我必须使用那个编译器。
我查阅了该编译器的文档: g++-4.8 documentation support for System-Headers
是这样写的:
除
#warning生成的警告外,所有警告都会在 GCC 处理系统标头时被抑制。系统标头中定义的宏在展开时不会受到一些警告的影响。
还有一个指令,
#pragma GCC system_header,它告诉 GCC 将当前包含文件的其余部分视为系统头,无论它是在哪里找到的。文件中#pragma之前的代码不会受到影响。#pragma GCC system_header在主源文件中无效。
由于英语是我的第二语言,我不清楚最后一句话是什么意思。
我想禁用整个 single 头文件中的所有警告。此头文件包含在许多不同的 C++ 源代码文件*.cpp 中。这个头文件也被其他几个头文件*.h所包含,而那些头文件也被其他文件所包含。
我想知道,如果我将#pragma GCC system_header 放在single 头文件中,那么#pragma 指令的效果是否会转移到包含该头文件的任何文件中?因为我不想禁用包含此头文件的文件中的任何警告。我只想对在该头文件中定义的结构禁用警告。
也就是说,#pragma GCC system_header 的效果是适用于整个翻译单元(我不希望这样)还是仅适用于文本编辑器中的单个头文件?
【问题讨论】:
标签: c++ gcc preprocessor translation-unit