Как отключить предупреждение "ISO C++ не поддерживает __int128"?
Я компилирую свой код с помощью GCC, с -Wall -Wextra -Wpedantic
переключатели и стандартный набор без расширения (скажем, это -std=c++14
). Но - я хочу иметь исключение и использовать __int128
и это предупреждает меня:
warning: ISO C++ does not support ‘__int128’ for ‘hge’ [-Wpedantic]
Могу ли я подавить конкретное предупреждение о __int128
? Или я могу временно подавить -Wpedantic
до и после использования этого типа?
1 ответ
Если мы посмотрим документацию для-Wpedantic
мы можем отметить следующее:
Педантические предупреждения также отключены в следующем выражении
__extension__
,
Небольшой эксперимент показывает, что это позволяет определить переменные, как ожидается, даже под флагом:
__extension__ __int128 hge{};
Но, конечно, это довольно обременительно, если мы собирались часто использовать этот тип. Способ сделать это менее сложным - использовать псевдоним типа. Хотя мы должны быть осторожны здесь, __extension__
Атрибут должен предшествовать всему объявлению:
__extension__ typedef __int128 int128;
Вы можете видеть это работает здесь.
Альтернативный подход, который следует вашей первоначальной мысли, состоит в использовании диагностических прагм вокруг псевдонима типа:
namespace my_gcc_ints {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
using int128 = __int128;
#pragma GCC diagnostic pop
}
Который также работает довольно хорошо.