【问题标题】:Redefinition of noinline attribute using macros使用宏重新定义 noinline 属性
【发布时间】:2020-11-25 07:52:24
【问题描述】:

是否可以使用#define 重新定义[[gnu::noinline]] 和__attribute__((noinline)) 等属性?

我正在努力做到这一点

#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))

【问题讨论】:

    标签: c++ gcc macros


    【解决方案1】:

    是否可以使用 #define 重新定义 [[gnu::noinline]] 和 attribute((noinline)) 等属性?

    你不能“重新定义”它们,即你不能让它们意味着别的东西。

    但是,您可以为它们定义宏别名,这是您通过示例实现的目标。

    【讨论】:

    • 我的示例无法编译。他们应该吗?这只是针对一个 Arduino 项目,所以也许他们的 GCC 版本不允许这样做?
    • @Iain 他们在我的 GCC 中编译得很好。
    • 嗯,很奇怪。我刚试过arduino-cli,效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2021-07-26
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多