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

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

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

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

Есть ли способ сказать gcc, что сделать это?

Ответы [ 6 ]

6 голосов
/ 09 октября 2011

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

4 голосов
/ 26 января 2012

Эта проверка доступна в Cppcheck , бесплатном статическом анализаторе кода C и C ++. Проверка в настоящее время помечена как «экспериментальная», поэтому для ее включения потребуется использовать параметр командной строки --experimental.

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

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

2 голосов
/ 09 октября 2011

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

Лучше всего было бы использовать операторы «else if»

1 голос
/ 09 октября 2011

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

0 голосов
/ 18 октября 2017

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

0 голосов
/ 09 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...