C attribute: nodiscard (since C23)
Si une fonction déclarée
nodiscard
ou une fonction renvoyant une structure/union/enumération déclarée
nodiscard
par valeur est appelée depuis une
expression à valeur ignorée
autre qu'un cast vers
void
, il est recommandé que le compilateur émette un avertissement.
Table des matières |
Syntaxe
[[
nodiscard
]]
[[
__nodiscard__
]]
|
(1) | ||||||||
[[
nodiscard
(
littéral de chaîne
)
]]
[[
__nodiscard__
(
littéral de chaîne
)
]]
|
(2) | ||||||||
| string-literal | - | texte qui pourrait être utilisé pour expliquer la raison pour laquelle le résultat ne devrait pas être ignoré |
Explication
Apparaît dans une déclaration de fonction, une déclaration d'énumération, ou une déclaration de struct/union.
Si, à partir d'une expression de valeur rejetée autre qu'un cast vers void ,
-
une fonction déclarée
nodiscardest appelée, ou -
une fonction retournant une structure/union/enumération déclarée
nodiscardest appelée,
le compilateur est encouragé à émettre un avertissement.
Le string-literal , s'il est spécifié, est généralement inclus dans les avertissements.
Exemple
struct [[nodiscard]] error_info { int status; /*...*/ }; struct error_info enable_missile_safety_mode() { /*...*/ return (struct error_info){0}; } void launch_missiles() { /*...*/ } void test_missiles() { enable_missile_safety_mode(); // le compilateur peut avertir lors de l'abandon d'une valeur nodiscard launch_missiles(); } struct error_info* foo() { static struct error_info e; /*...*/ return &e; } void f1() { foo(); // le type nodiscard lui-même n'est pas retourné, aucun avertissement } // nodiscard( chaîne-littérale ): [[nodiscard("PURE FUN")]] int strategic_value(int x, int y) { return x ^ y; } int main() { strategic_value(4,2); // le compilateur peut avertir lors de l'abandon d'une valeur nodiscard int z = strategic_value(0,0); // OK : la valeur de retour n'est pas abandonnée return z; }
Sortie possible :
game.cpp:5:4: warning: ignoring return value of function declared with 'nodiscard' attribute game.cpp:17:5: warning: ignoring return value of function declared with 'nodiscard' attribute: PURE FUN
Voir aussi
|
Documentation C++
pour
nodiscard
|