Ответ 1
Используйте __attribute__ ((fallthrough))
switch (condition) {
case 1: __attribute__ ((fallthrough));
case 2: __attribute__ ((fallthrough));
case 3:
printf("1..3\n");
break;
}
Новые версии gcc предлагают Wimplicit-fallthrough
, что отлично подходит для большинства операторов switch. Тем не менее, у меня есть один оператор switch, где я хочу разрешить провал из всех case-утверждений.
Есть ли способ сделать явное падение? Я бы предпочел избежать компиляции с Wno-implicit-fallthrough
для этого файла.
EDIT: Я ищу способ сделать падение через явное (если это возможно), а не отключать предупреждение с помощью компилятора или прагмы.
Используйте __attribute__ ((fallthrough))
switch (condition) {
case 1: __attribute__ ((fallthrough));
case 2: __attribute__ ((fallthrough));
case 3:
printf("1..3\n");
break;
}
Вы можете использовать диагностические прагмы GCC, чтобы отключить это конкретное предупреждение для вашего исходного файла или некоторой части исходного файла. Попробуйте поместить это в начало файла:
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
GCC прорывные магические комментарии
Вы не должны использовать это, это безумие, но полезно знать о:
int main(int argc, char **argv) {
(void)argv;
switch (argc) {
case 0:
argc = 1;
// fall through
case 1:
argc = 2;
};
}
предотвращает предупреждение в GCC 7.4.0 с помощью:
gcc -Wall -Wextra main.c
man gcc
описывает, как разные комментарии могут или не могут быть распознаны в зависимости от значения:
-Wimplicit-fallthrough=n
Атрибут С++ 17 [[fallthrough]]
С++ 17 получил стандартизированный синтаксис для этого: GCC 7, -Wimplicit-fallthrough предупреждений и переносимый способ их очистки?