C++ 17 introduit l'attribut [[maybe_unused]].
Je suppose que c'est une version standardisée de GCC et Clang: __attribute__((unused)).est-ce que je mets [[peut-être inutilisé]] sur des déclarations de fonction ou des définitions?
Pour les fonctions inutilisées que je ne veux pas voir un avertissement,
dois-je spécifier l'attribut être sur
déclarations de fonction?
void maybe_used_function() [[maybe_unused]];
ou définitions de fonction?
void maybe_used_function() [[maybe_unused]] {
/* impl */
}
L'un ou l'autre? Tous les deux?
L'effet sera-t-il le même sur les attributs standardisés et spécifiques au compilateur?
Je ne trouve pas de documentation claire sur le comportement du placement, et quelle est la pratique courante.
Lorsque je place l'attribut avant que le corps de la fonction dans une définition, GCC et clang donne une erreur:
void function();
int main(){}
void function() __attribute__((unused)) {}
avertissement: GCC ne permet pas l'attribut « utilisé » dans cette position sur une définition de fonction [-Wgcc-compat] fonction void() __attribute __ ((inutilisé)) {
Cependant, l'attribut peut être placé dans deux autres endroits sans erreur:
__attribute__((unused)) void __attribute__((unused)) function() {}
Peut-être un de ces moyens est de savoir comment je comptais utiliser l'attribut sur les définitions de fonction?
Avez-vous * essayé * et vu ce que le compilateur dit réellement? AFAIK, les attributs vont sur les déclarations * seulement *, mais je n'ai pas revérifié le texte standard. –
@JesperJuhl: Le compilateur est faux dans ce cas et ceci est loin d'être inhabituel, en particulier quand on parle de fonctionnalités de langage _upcoming_ qui peuvent ou non être implémentées correctement (ou pas du tout). – ildjarn
@ildjarn l'erreur GCC provenait de '__attribute __ ((inutilisé))' pas '[[maybe_unused]]'. Clang semble faire la même chose. –