Как отключить предупреждение «ISO C ++ не поддерживает __int128»? - PullRequest
0 голосов
/ 12 февраля 2019

Я компилирую свой код с помощью gcc, с переключателями -Wall -Wextra -Wpedantic и стандартным набором без расширения (скажем, это -std=c++14).Но - я хочу иметь исключение и использовать __int128, и я получаю предупреждение:

warning: ISO C++ does not support ‘__int128’ for ‘hge’ [-Wpedantic]

Могу ли я подавить конкретное предупреждение о __int128?Кроме того, могу ли я временно подавить -Wpedantic до и после использования этого типа?

1 Ответ

0 голосов
/ 12 февраля 2019

Если мы обращаемся к документации для -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
}

Что также неплохо работает .

...