C++ 17 führt das Attribut [[maybe_unused]] ein.
Ich nehme an, dies ist eine standardisierte Version von GCC und Clang: __attribute__((unused)).setze ich [[vielleicht unbenutzt]] auf Funktionsdeklarationen oder Definitionen?
Für nicht genutzte Funktionen, die ich will nicht von einer Warnung, um zu sehen,
sollte ich auf
Funktionsdeklarationen das Attribut sein Angabe?
void maybe_used_function() [[maybe_unused]];
oder Funktionsdefinitionen?
void maybe_used_function() [[maybe_unused]] {
/* impl */
}
Entweder? Beide?
Wird der Effekt sowohl bei den standardisierten als auch bei den compilerspezifischen Attributen gleich sein?
Ich kann keine klare Dokumentation über das Vermittlungsverhalten finden und was die übliche Praxis ist.
Wenn ich stelle das Attribut vor dem Funktionskörper in einer Definition, GCC und Klirren einem Fehler geben:
void function();
int main(){}
void function() __attribute__((unused)) {}
Warnung: GCC nicht erlaubt 'ungenutzt' -Attribut in dieser Position auf eine Funktionsdefinition [-Wgcc-compat] Leere function() __attribute __ ((ungebraucht)) {
Allerdings kann das Attribut in zwei anderen Orten ohne Fehler gesetzt werden:
__attribute__((unused)) void __attribute__((unused)) function() {}
Vielleicht eine dieser Möglichkeiten, wie ich erwartet, dass das Attribut Funktionsdefinitionen benutzen?
Haben Sie * versucht * und sehen, was der Compiler eigentlich sagt? AFAIK, die Attribute gehen auf die Deklarationen * nur *, aber ich habe den Standardtext nicht doppelt überprüft. –
@JesperJuhl: Der Compiler ist in diesem Fall falsch, und dies ist alles andere als ungewöhnlich, besonders bei der Diskussion von _upcoming_ Sprachfeatures, die möglicherweise (oder überhaupt nicht) korrekt implementiert wurden. – ildjarn
@ildjarn der GCC-Fehler kam von '__attribute __ ((unbenutzt))' nicht '[[may_unused]]'. Clang scheint das Gleiche zu tun. –