首先,我不知道为什么" 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忽略&#34; -Wliteral-suffix&#34;但仍然得到了警告。如何抑制警告?为什么编译器首先会发出警告?
答案 0 :(得分:1)
好的,总结一下:未能取消警告是一个已知的gcc bug(gcc.gnu.org/bugzilla/show_bug.cgi?id=61653)。由于您不能(实际上,不应该)抑制警告,最简单的解决方法是在文字和#define字符串之间放置一个空格。你可以安全地做到这一点;它不会改变输出文本。
不再允许这样做的原因是因为文字字符串后面的字符被视为用户定义的文字,这是C ++ 11中的新功能。用户定义的文字被认为是与他们修改的文字相同的单个标记的一部分,因此END
不会被早期的#define取代。