Переопределение атрибута noinline с помощью макросов

#c #gcc #macros

#c #gcc #макросы

Вопрос:

Возможно ли переопределить такие атрибуты, как [[gnu::noinline]] и __attribute__((noinline)) с помощью #define ?

Я пытаюсь добиться этого

 #define noinline __attribute__((noinline)) 

noinline void my_function();

// Turns into
__attribute__((noinline))
void my_function();
// or 
[[gnu::noinline]]
void my_function();
 

Я попытался изменить определение макроса, но, похоже, я не могу перехитрить GCC.

 #define noinline_ [gnu::noinline]
#define noinline [noinline_]
// and 
#define noinline_ __attribute__((
#define noinline noinline_ noinline))
 

Ответ №1:

Возможно ли переопределить такие атрибуты, как [[gnu::noinline]] и атрибут((noinline)), используя #define ?

Вы не можете «переопределить» их, т.Е. Вы не можете заставить их означать что-то другое.

Однако вы можете определить для них псевдонимы макросов, что является целью, которую вы достигли в своем примере.

Комментарии:

1. Мои примеры не компилируются. Должны ли они? Это только для проекта Arduino, поэтому, возможно, их версия GCC этого не позволяет?

2. @Iain Они отлично компилируются в моем GCC.

3. Хммм странно. Я только что попробовал arduino-cli , и это сработало просто отлично.