
Envoyé par
Pyramidev
Pour que le compilateur sache que ce n'est pas un oubli dans le code de
foo, il faut annoter la fonction
bar avec l'attribut
[[noreturn]], mais ce dernier n'est disponible que depuis C++11.
Dans ton lien, il est clairement dit que [[noreturn]] sert à indiquer qu'une fonction ne retourne jamais. Sauf à cause d'une exception. Elle ne sert donc pas à autoriser à omettre des instructions "return".
Typiquement, [[noreturn]] sert à indiquer une fonction qui fait une boucle infinie.
Voici un code :
1 2 3 4 5 6 7 8 9 10 11 12
| void throwException() {
throw "bim!";
}
[[noreturn]]
int half(int value) {
if (value == 0) {
throwException();
} else {
return value / 2;
}
} |
Il génère 2 warnings :
warning: function declared 'noreturn' has a 'return' statement
warning: 'noreturn' function does return
Sans le [[noreturn]], il en génère un seul :
warning: control reaches end of non-void function [-Wreturn-type]
Partager