已添加代码:
bool CHARACTER::SpamAllowBuf(const char *Message)
{
if (!strcmp(Message, "(?˛´c)") || !strcmp(Message, "(μ·)") || !strcmp(Message, "(±a≫Y)") || !strcmp(Message, "(AA??)") || !strcmp(Message, "(≫c¶?)") || !strcmp(Message, "(?đłe)") || !strcmp(Message, "(??C?)") || !strcmp(Message, "(????)") || !strcmp(Message, "(AE??)"))
{
return true;
}
return false;
}
警告给出:
char.cpp:7254:121: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp:7254:245: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp:7254:275: warning: trigraph ??) ignored, use -trigraphs to enable
如何跳过此警告?
答案 0 :(得分:7)
三字母组合序列是任何以"??"
开头的字符序列;下一个字符确定序列的含义。 Trigraph序列用于(或曾经)表示某些键盘上未提供的字符。因此,例如"??="
的意思是#
。
Trigraph序列不再广泛使用;我没有检查,但是它们很可能已在C ++中弃用或完全删除。 (感谢@johnathan指出它们已在C ++ 17中删除)
无论如何,如果您不能关闭该警告,则可以更改字符序列,以使它在编译器中看起来相同,但不是三字组。为此,请将?
字符之一更改为\?
。因此"??="
将变成"?\?="
;那不是三部曲,因为它不由字符"??"
后面跟另一个字符组成,但是一旦编译器对其进行处理,它就是两个问号,后跟一个'='
符号。
重新排列引用的字符串的另一种方法是将它们分开。因此"??="
将变成"??" "="
或"?" "?="
;编译器将那些相邻的字符串文字串联起来,但是,它们又不是三连字符序列,因为这些连接是在检查三连字符之后发生的。
答案 1 :(得分:2)
要回答您的问题,请使用-Wno-trigraphs
(如果使用gcc / clang)。
但是,根据C ++版本的不同,您使用的三字母组合仍然是标准的一部分。因此,像"?" "?" "?"
这样的问题标记的明确序列将避免遇到三部曲问题。编译器将看到一个字符串"???"
。