g++ - 如何禁用 g++ 中的特定警告

标签 g++ compiler-warnings

首先,我不知道为什么“g++ -std=c++0x -Wall”会给我警告:文字后缀无效;在以下程序中,C++11 要求文字和字符串宏 [-Wliteral-suffix] 之间有一个空格:

#include <iostream>

#define BEGIN   "<b>"
#define END "</b>"

#pragma GCC diagnostic ignored "-Wliteral-suffix"
int main()
{
  std::cout << "hello " BEGIN"world"END "\n";
}

第二,我关注了gcc doc忽略“-Wliteral-suffix”但仍然收到警告。如何抑制警告?为什么编译器首先会发出警告?

最佳答案

好吧,总结一下:无法抑制警告是一个已知的 gcc 错误 (gcc.gnu.org/bugzilla/show_bug.cgi?id=61653)。由于您不能(而且实际上不应该)抑制警告,因此最简单的解决方法是在文字和 #define 字符串之间放置一个空格。您可以安全地执行此操作;它不会改变输出文本。

不再允许这样做的原因是,直接位于文字字符串之后的字符被视为用户定义的文字,这是 C++11 中的新功能。用户定义的文字被认为是与其修改的文字相同的单个标记的一部分,因此 END 不会被早期的 #define 替换。

关于g++ - 如何禁用 g++ 中的特定警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38408632/

相关文章:

c++ - 返回对局部变量的引用,无需进行简单的转换

c++ - basic_filebuf::underflow 错误读取文件与 ifstream on/proc/pid/stat

c - 如何解决GCC编译[-Wformat]警告?

C++:将 uint32 设置为 int32(负值)

c++ - 模板、静态变量等的冲突声明

linux - 使用 gcc/g++ 时抑制系统调用

c++ - 如何解决不明确的重载函数调用?

c# - 当向参数提供某些值时生成编译器警告

compiler-errors - D中有一种静态打印吗?

swift - 在键入时关闭 Xcode 的未使用变量警告