Как отключить предупреждение "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
}

Который также работает довольно хорошо.

Другие вопросы по тегам