83 votes

Pourquoi GCC m'avertit-il d'une chute même quand j'utilise [[fallthrough]]?

Dans la partie de code suivante, j'utilise l'attribut standard [[fallthrough]] de C ++ 1z pour documenter qu'une défaillance est souhaitée:

 #include <iostream>

int main() {
    switch (0) {
        case 0:
            std::cout << "a\n";
            [[fallthrough]]
        case 1:
            std::cout << "b\n";
            break;
    }
}
 

Avec GCC 7.1, le code est compilé sans erreur. Cependant, le compilateur me met toujours en garde contre un échec:

 warning: this statement may fall through [-Wimplicit-fallthrough=]
    std::cout << "a\n";
    ~~~~~~~~~~^~~~~~~~
 

Pourquoi?

105voto

s3rvac Points 2687

Il vous manque un point-virgule après l'attribut:

case 0:
    std::cout << "a\n";
    [[fallthrough]];
    //             ^
case 1:

L' [[fallthrough]] attribut est appliqué à une instruction vide (voir P0188R1). L'actuel Clang tronc donne une erreur utile dans ce cas:

error: fallthrough attribute is only allowed on empty statements
    [[fallthrough]]
      ^
note: did you forget ';'?
    [[fallthrough]]
                   ^
                   ;

Mise à jour: Cody Gris signalé ce problème à l'équipe de GCC.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X