我怎么能跳过那些警告?C++

Dut*_*tzų 2 c++ trigraphs

已添加代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

警告给出:

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
Run Code Online (Sandbox Code Playgroud)

我怎么能跳过这个警告?

Pet*_*ker 7

三字符序列是以字母开头的任何字符序列"??"; 下一个字符决定了序列的含义.Trigraph序列(或用于)表示某些键盘上未提供的字符.所以,例如,"??="意味着#.

Trigraph序列不再广泛使用; 我没有检查过,但它们很可能已在C++中被弃用或完全删除.(感谢@johnathan指出它们已在C++中删除17)

在任何情况下,如果你不能关闭该警告,可以更改字符序列,使得它看起来相同的编译器,但不是一个三字符.为此,请将其中一个?字符更改为\?.所以"??="会成为"?\?="; 这不是一个三字母,因为它不是由"??"另一个字符后跟的字符组成,但是一旦编译器处理了它,它就会出现两个问号后跟一个'='符号.

重新排列引用字符串的另一种方法是将它们分开.所以"??="会成为"??" "="或"?" "?="; 编译器串接的相邻字符串文字,但同样,由于串联检查三合发生后,他们没有三合序列.

  • @johnathan - 谢谢.实际上,他们已经从编译器中删除了比这更长的时间.<g>我在80年代为Borland做的第一个项目之一就是编写一个独立的预处理程序来扩展trigraphs,因为他们的C编译器没有这样做.我记得这很常见. (2认同)