Подтвердить что ты не робот

Сделать gcc предупреждение об ошибке?

Я получаю это предупреждение от GCC:

предупреждение: не может передавать объекты типа не-POD "класс" Что-то "через"..."; вызов прерывается во время выполнения

Это довольно смертельно, тем более, что он вызывает прерывание. Почему это не ошибка? Я хотел бы сделать это ошибкой, но:

  • Как я могу сделать конкретное предупреждение об ошибке?
  • Какое предупреждение это? Согласно http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html, -Wno-invalid-offsetof выглядит как флаг, чтобы скрыть его, но он не
4b9b3361

Ответ 1

Я не уверен, что такое правильное предупреждение, но как только вы его нашли, вы можете изменить его расположение следующим образом (используя "формат" в качестве примера):

#pragma GCC diagnostic error "-Wformat"

Или, как указывает strager:

gcc -Werror=format ...

Изменить: Я только что проверил источник gcc для этого, и это конкретное предупреждение не может быть отключено с помощью флагов командной строки.

Ответ 2

-Werror=specific-warning превратит указанный -Wspecific-warning в ошибку в GCC 4.3.x или новее. В 4.1.2 работает только -Werror-implicit-function-declaration. Обратите внимание на дефис вместо знака равенства - он работает только для этого конкретного случая, а не для других. Это одно из наиболее серьезных распространенных предупреждений, и это определенно удобно сделать ошибку.

Кроме того, более старые версии GCC, похоже, предоставляют кувалду -Werror, чтобы каждое последнее предупреждение выдает ошибку.

Ответ 3

Похоже, что есть множество других предупреждений, которые вы не хотите превращать в ошибки (используя флаг -Werror). В целом, это хорошая практика для исправления всех предупреждений. Использование -Werror заставляет это.

Ответ 4

Вы можете использовать флаг компилятора -Werror, чтобы превращать все или некоторые предупреждения в ошибки.

Ответ 5

Вы можете использовать параметр -fdiagnostics-show-option, чтобы увидеть параметр -W, который применяется к определенному предупреждению.

К сожалению, в этом случае нет специального варианта, который охватывает это предупреждение.

Похоже, что в gcc-4.5 будет лучше поддерживать эту функцию.