web-dev-qa-db-fra.com

Comment faire une transition explicite en C

Les nouvelles versions de gcc offrent le Wimplicit-fallthrough, ce qui est formidable pour la plupart des instructions switch. Cependant, j'ai une instruction switch où je veux autoriser les retombées de toutes les instructions case.

Existe-t-il un moyen de faire une chute explicite? Je préfère éviter d'avoir à compiler avec Wno-implicit-fallthrough pour ce fichier.

EDIT: Je cherche un moyen de rendre la chute explicite (si c'est possible), de ne pas désactiver l'avertissement via un commutateur de compilateur ou un pragma.

21
dlasalle

Utilisez __attribute__ ((fallthrough))

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

Commentaires magiques de chute du GCC

Vous ne devriez pas l'utiliser, c'est fou, mais bon à savoir:

int main(int argc, char **argv) {
    (void)argv;
    switch (argc) {
        case 0:
            argc = 1;
            // fall through
        case 1:
            argc = 2;
    };
}

empêche l'avertissement sur GCC 7.4.0 avec:

gcc -Wall -Wextra main.c

man gcc décrit comment différents commentaires peuvent ou non être reconnus en fonction de la valeur de:

-Wimplicit-fallthrough=n

C++ 17 [[fallthrough]] attribut

C++ 17 a une syntaxe standardisée pour cela: GCC 7, -Avertissements de repli wimplicite, et moyen portable pour les effacer?

Vous devriez pouvoir utiliser pragmas de diagnostic GCC pour désactiver cet avertissement particulier pour votre fichier source ou une partie d'un fichier source. Essayez de mettre ceci en haut de votre fichier:

#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
2
David Grayson