Как я могу сказать gcc предупреждать (или терпеть неудачу) о операторах switch/case без перерыва?

У меня сложный оператор switch, и я забыл поставить a break в конце одного из case s. Это вполне законно, и в результате у меня был переход к следующему case.

Есть ли способ, чтобы gcc предупреждал (или даже лучше, терпел неудачу), если я пренебрегаю предложением break?

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

Есть ли способ сказать gcc для этого?

+9
источник поделиться
6 ответов

Там обсуждается такая функция (-Wswitch-break) в http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7652. Но он пока не реализован.

+6
источник

Эта проверка доступна в Cppcheck, свободном статическом анализаторе для кода C и С++. В настоящее время проверка отмечена как "экспериментальная", поэтому вам нужно будет использовать переключатель командной строки --experimental, чтобы включить его.

Эта проверка предупреждает против предложения непустого случая, которое переходит к следующему случаю без оператора потока управления, такого как break, continue, return и т.д., если нет комментариев с формулировкой типа // fall through непосредственно перед следующим case.

Вы можете получить представление о типах конструкций, которые обрабатываются, просмотрев switchFallThroughCase тестовые примеры в исходном коде.

+4
источник

Я только что прошел через опции gcc, и нет никого, что, по крайней мере, даст вам уведомление. Есть -Wswitch, -Wswitch-default и -Wswitch-enum (http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options), но никто из них не будет работать для вас.

Лучше всего было бы использовать инструкции "else if"

+2
источник

Вы можете создать regexp для grep/perl/emacs/etc, чтобы найти все места, где нет break до case.

+1
источник

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

0
источник

GCC 7 имеет предупреждение с -Wextra или -Wimplicit-fallthrough(=[1-5])?: https://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос