триграфы — как я могу пропустить эти предупреждения? Переполнение стека

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

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

Решение

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

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

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

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

7

Другие решения

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

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

2

По вопросам рекламы [email protected]