Код добавлен:
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
Как я могу сделать, чтобы пропустить это предупреждение?
Последовательность триграфа — это любая последовательность символов, начинающаяся с "??"
; следующий символ определяет значение последовательности. Последовательности триграфа (или были) используются для представления символов, которые не были представлены на некоторых клавиатурах. Так, например, "??="
средства #
,
Последовательности триграфа больше не используются широко; Я не проверял, но они могут быть устаревшими в C ++ или удалены полностью. (Спасибо @johnathan за указание, что они были удалены в C ++ 17)
В любом случае, если вы не можете отключить это предупреждение, вы можете изменить последовательность символов так, чтобы она выглядела одинаково для компилятора, но не была триграфом. Для этого измените один из ?
символы для \?
, Так "??="
станет "?\?="
; это не триграф, потому что он не состоит из символов "??"
сопровождаемый другим символом, но как только компилятор обработал это, это два вопросительных знака, сопровождаемых '='
знак.
Другой способ переставить цитируемые строки — разделить их. Так "??="
станет "??" "="
или же "?" "?="
; компилятор объединяет эти соседние строковые литералы, но, опять же, они не являются последовательностями триграфов, потому что конкатенация происходит после проверки триграфов.
Чтобы ответить на ваш вопрос, используйте -Wno-trigraphs
(если используется gcc / clang).
Но в зависимости от версии C ++ вы используете триграфы все еще являются частью стандарта. Таким образом, выразить последовательность вопросов знаков, как это "?" "?" "?"
позволит избежать попадания в задачу триграфа. Компилятор увидит строку "???"
,