首先,我不知道为什么“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/