Im folgenden Code verwende ich das Standardattribut [[fallthrough]]
von C ++ 1z, um zu dokumentieren, dass ein Fallthrough gewünscht wird:
#include <iostream>
int main() {
switch (0) {
case 0:
std::cout << "a\n";
[[fallthrough]]
case 1:
std::cout << "b\n";
break;
}
}
Mit GCC 7.1 wird der Code fehlerfrei kompiliert. Der Compiler warnt mich jedoch immer noch vor einem Durchfall:
warning: this statement may fall through [-Wimplicit-fallthrough=]
std::cout << "a\n";
~~~~~~~~~~^~~~~~~~
Warum?
c++
switch-statement
c++17
fall-through
s3rvac
quelle
quelle
Antworten:
Nach dem Attribut fehlt ein Semikolon:
Das
[[fallthrough]]
Attribut soll auf eine leere Anweisung angewendet werden (siehe P0188R1 ). Der aktuelle Clang-Trunk gibt in diesem Fall einen hilfreichen Fehler :Update: Cody Gray hat dieses Problem dem GCC-Team gemeldet .
quelle
fallthrough attribute is only allowed on empty statements
; Da darauf keine leere Anweisung folgt, ignoriert gcc sie einfachclang
beheben Sie es.