Как указать атрибут 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++?

Другие вопросы по тегам