2017-06-13 2 views
10

Les nouvelles versions de gcc offrent le Wimplicit-fallthrough, ce qui est idéal pour la plupart des instructions de commutation. Cependant, j'ai une déclaration de commutateur où je veux permettre des passages à travers de toutes les déclarations de cas.Comment effectuer une correction explicite dans C

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 suis à la recherche d'un moyen de rendre l'automne explicite (si c'est possible), de ne pas désactiver l'avertissement via un commutateur de compilation ou un pragma.

+0

Peut-être [ce] (https://stackoverflow.com/a/3394268/1553090) est ce que vous voulez. – paddy

+0

J'ai trouvé le même. https://stackoverflow.com/questions/3378560/how-to-disable-gcc-warnings-for-a-few-lines-of-code –

+0

Découvrez la description à ['-Wimplicit-fallthrough'] (https: //gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Warning-Options.html#index-Wimplicit-fallthrough) dans la documentation du GCC? Il n'y aura pas de mécanisme de non-extension - toute la question est toute extension. –

Répondre

8

Utilisez __attribute__ ((fallthrough))

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

C'est la bonne réponse, mais l'exemple est mauvais: -Wimplicit-fallthrough n'est pas émis pour les corps de cas vides, donc ce n'est pas nécessaire ici. – thakis

2

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

#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"