#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
, и это сработало просто отлично.