我怎样才能跳过这些警告? C++

how can i skip those warnings? C++

添加的代码:

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

我怎样才能跳过这个警告?

要回答您的问题,请使用 -Wno-trigraphs(如果使用 gcc/clang)。

但是根据您使用的 C++ 版本,三字母仍然是标准的一部分。因此,像这样 "?" "?" "?" 这样的问号序列将避免遇到三字母问题。编译器会看到一串 "???".

三字母序列是以 "??" 开头的任何字符序列;下一个字符决定序列的含义。三字母序列用于(或曾经)用于表示某些键盘上未提供的字符。因此,例如,"??=" 表示 #

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

无论如何,如果您不能关闭该警告,您可以更改字符序列,使其看起来与编译器相同,但不是三字母。为此,将 ? 字符之一更改为 \?。所以 "??=" 会变成 "?\?=";这不是三字母组合,因为它不包含字符 "??" 后跟另一个字符,但是一旦编译器处理了它,它就是两个问号后跟一个 '=' 符号。

另一种重新排列引用字符串的方法是将它们分开。所以 "??=" 会变成 "??" "=""?" "?=";编译器连接那些相邻的字符串文字,但同样,它们不是三字母序列,因为连接发生在检查三字母之后。