Как сделать явный провал в C

Новые версии gcc предлагают Wimplicit-fallthrough, что отлично подходит для большинства операторов switch. Тем не менее, у меня есть один оператор switch, где я хочу разрешить провал из всех case-утверждений.

Есть ли способ сделать явное падение? Я бы предпочел избежать компиляции с Wno-implicit-fallthrough для этого файла.

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

Ответ 1

Используйте __attribute__ ((fallthrough))

switch (condition) {
    case 1: __attribute__ ((fallthrough));
    case 2: __attribute__ ((fallthrough));
    case 3:
        printf("1..3\n");
        break;
}

Ответ 2

Вы можете использовать диагностические прагмы GCC, чтобы отключить это конкретное предупреждение для вашего исходного файла или некоторой части исходного файла. Попробуйте поместить это в начало файла:

#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"

Ответ 3

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 предупреждений и переносимый способ их очистки?