Как указать атрибут GNU C?
В руководстве GUN C, 6.30 Объявление атрибутов функций, говорится:
Вы также можете указать атрибуты с
__
до и после каждого ключевого слова. Это позволяет вам использовать их в заголовочных файлах, не заботясь о возможном макросе с тем же именем. Например, вы можете использовать__noreturn__
вместоnoreturn
,
Означает ли это, что пользователь может указать настраиваемые атрибуты? Или что еще? Я определенно запутался, кто-нибудь может помочь или дать мне образцы?
1 ответ
Это говорит о том, что заголовочный файл мог бы сделать:
#define noreturn 3
Если вы затем попытаетесь объявить функцию как:
void fatal () __attribute__ ((noreturn));
он будет обработан так, как если бы вы написали:
void fatal () __attribute__ ((3));
что не то, что вы хотите. Таким образом, вы можете написать вместо этого:
void fatal () __attribute__ ((__noreturn__));
Это безопасно, поскольку пользователям не разрешается определять макросы с именами, начинающимися с двух подчеркиваний, эти имена зарезервированы для реализации. См. Каковы правила использования подчеркивания в идентификаторе C++?