как я могу пропустить эти предупреждения? C ++ - PullRequest
0 голосов
/ 18 ноября 2018

Код добавлен:

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

Как я могу пропустить это предупреждение?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Последовательность триграфа - это любая последовательность символов, начинающаяся с "??";следующий символ определяет значение последовательности.Последовательности триграфа (или были) используются для представления символов, которые не были представлены на некоторых клавиатурах.Так, например, "??=" означает #.

Последовательности триграфа больше не используются;Я не проверял, но они могут быть устаревшими в C ++ или удалены полностью.(Спасибо @johnathan за указание, что они были удалены в C ++ 17)

В любом случае, если вы не можете отключить это предупреждение, вы можете изменить последовательность символов так, чтобы она выглядела одинаковокомпилятору, но это не триграф.Для этого измените один из символов ? на \?.Так что "??=" станет "?\?=";это не триграф, потому что он не состоит из символов "??", за которыми следует другой символ, но как только компилятор обработает его, это два вопросительных знака, за которыми следует знак '='.

Другой способпереставить цитируемые строки означает разделить их.Так что "??=" станет "??" "=" или "?" "?=";компилятор объединяет эти смежные строковые литералы, но, опять же, они не являются последовательностями триграфов, потому что конкатенация происходит после проверки триграфов.

0 голосов
/ 18 ноября 2018

Чтобы ответить на ваш вопрос, используйте -Wno-trigraphs (при использовании gcc / clang).

Но в зависимости от версии C ++, вы используете триграфы, все еще являются частью стандарта.Таким образом, экспресс-последовательность знаков вопроса, подобная этой "?" "?" "?", позволит избежать проблемы триграфа.Компилятор увидит строку "???".

...