C++ 17 wprowadza atrybut [[maybe_unused]].
Zakładam, że jest to standardowa wersja GCC i Clang: __attribute__((unused)).Czy umieściłem [[być może nieużywane]] w deklaracjach funkcji lub definicjach?
Dla nieużywanych funkcji, które nie chcą, aby zobaczyć ostrzeżenie,
Byłbym określając atrybut deklaracji
funkcyjnych?
void maybe_used_function() [[maybe_unused]];
lub definicje funkcji?
void maybe_used_function() [[maybe_unused]] {
/* impl */
}
czy jeden? Obie?
Czy efekt będzie taki sam dla atrybutu standardowego i dla kompilatora?
Nie mogę znaleźć żadnej jasnej dokumentacji na temat zachowań w zakresie umieszczania i jaka jest powszechna praktyka.
Kiedy umieścić atrybut przed ciele funkcji w definicji, GCC i brzęk daje błąd:
void function();
int main(){}
void function() __attribute__((unused)) {}
ostrzeżenie: GCC nie pozwala „niewykorzystane” atrybut w tej pozycji na definicja funkcji [-Wgcc-compat] nieważny() funkcji __attribute __ ((niewykorzystane)) {
Jednak atrybut może być umieszczone w dwóch innych miejscach bez błędu:
__attribute__((unused)) void __attribute__((unused)) function() {}
Może któryś z tych sposobów jest jak jestem spodziewałem się użyć atrybutu w definicji funkcji?
Czy * wypróbowałeś * i zobaczysz, co faktycznie mówi kompilator? AFAIK, atrybuty przechodzą na deklaracje * tylko *, ale nie sprawdziłem podwójnie standardowego tekstu. –
@JesperJuhl: W tym przypadku kompilator jest nieprawidłowy i nie jest to niezwykłe, zwłaszcza podczas omawiania funkcji języka poprzedzającego, które mogą, ale nie muszą być implementowane poprawnie (lub w ogóle). – ildjarn
@ildjarn Błąd GCC pochodzi z '__attribute __ ((nieużywany))' not' [[maybe_unused]] '. Clang wydaje się robić to samo. –