Dans le morceau de code suivant, j'utilise l' [[fallthrough]]
attribut standard de C ++ 1z pour documenter qu'une chute 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 se compile sans erreur. Cependant, le compilateur me prévient toujours d'une erreur:
warning: this statement may fall through [-Wimplicit-fallthrough=]
std::cout << "a\n";
~~~~~~~~~~^~~~~~~~
Pourquoi?
Réponses:
Il vous manque un point-virgule après l'attribut:
case 0: std::cout << "a\n"; [[fallthrough]]; // ^ case 1:
L'
[[fallthrough]]
attribut doit être appliqué à une instruction vide (voir P0188R1 ). Le coffre Clang actuel 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 Gray a signalé ce problème à l'équipe du CCG.
la source
fallthrough attribute is only allowed on empty statements
; comme il n'est pas suivi d'une instruction vide, gcc l'ignore simplementclang
corrigez-le.