C++ 17 вводит атрибут [[maybe_unused]].
Я предполагаю, что это стандартизованная версия GCC и Clang's: __attribute__((unused)).Я помещаю [[возможно не используется]] в объявления функций или определения?
Для неиспользуемых функций, которые я не хочу видеть предупреждение от,
я должен указать атрибут на декларациях
функции?
void maybe_used_function() [[maybe_unused]];
или определения функции?
void maybe_used_function() [[maybe_unused]] {
/* impl */
}
Либо один? И то и другое?
Будет ли эффект одинаковым как для стандартизованных, так и для атрибутов компилятора?
Я не могу найти четкую документацию о поведении размещения и общей практике.
Когда я устанавливаю атрибут перед телом функции в определении, GCC и лязг выдаст ошибку:
void function();
int main(){}
void function() __attribute__((unused)) {}
предупреждение: НКУ не позволяет «неиспользуемый» атрибут в этом положении на определение функции [-Wgcc-Compat] недействительными() функция __attribute __ ((неиспользованные)) {
Однако, этот атрибут может быть размещен в двух других местах без ошибок:
__attribute__((unused)) void __attribute__((unused)) function() {}
Может быть, один из этих способов заключается в том, как я должен использовать атрибут на определения функции?
Вы * попробовали * и посмотрели, что на самом деле говорит компилятор? AFAIK, атрибуты идут по объявлениям * только *, но я не дважды проверял стандартный текст. –
@JesperJuhl: В этом случае компилятор ошибочен, и это далеко не необычно, особенно при обсуждении функций языка _upcoming_, которые могут или не могут быть реализованы правильно (или вообще). – ildjarn
@ildjarn Ошибка GCC возникла из '__attribute __ ((не используется))' not '[[maybe_unused]]'. Кажется, Кланг делает то же самое. –