【问题标题】:"__attribute__((always_inline))" not working as expected?“__attribute__((always_inline))”没有按预期工作?
【发布时间】:2013-02-10 16:48:14
【问题描述】:
static inline int my_function() __attribute__((always_inline));

static inline int my_function()
{
     //...
}

所以我已经像上面那样声明了我的函数,尽管在二进制文件中该函数被分支而不是内联,因此一个简单的 NOP 可以使整个函数变得无用。

如何强制 Xcode 4.6 内联函数?

【问题讨论】:

  • 你不能强制 Xcode 内联函数,因为 Xcode 不会编译你的代码。也许您想要求编译器内联它,对吧?
  • 是的,你是对的,我希望通过包括我正在使用的 IDE 回答的人会知道编译器和版本,他们可以建议将可能的构建设置标志输入到 Xcode 中。
  • 告诉我们my_function的定义。
  • @user1763532 酷。您确定您也将定义标记为always_inline 吗?编译器在遇到定义时会看到声明吗?
  • 我希望你没有用这样的接口声明你的函数:返回类型为int 并且从不返回任何内容,并且接收未指定数量的参数?但如果是这样,您应该首先修复它以帮助编译器知道在调用点放置什么,然后再查看。你编译时是否启用了所有优化?

标签: c xcode inline xcode4.6


【解决方案1】:

你在这里给出的函数没有原型:你没有提供参数的类型。在 C 中,仅在声明中包含 () 意味着该函数接收未知数量的参数。可能编译器然后假设对内联它的函数不够了解。使用(void) 声明一个不带参数的函数。

【讨论】:

  • 抱歉,我简化了代码以突出我如何声明它是内联的。它当然会返回一个整数,否则它会被声明为 void 的返回类型。问题在于 my_function() 调用递归函数,编译器无论如何都无法内联。不过谢谢,从现在开始我将使用 (void) 作为参数。
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 2020-03-18
  • 2012-06-14
  • 2014-11-15
  • 1970-01-01
  • 2012-07-02
  • 2011-09-07
  • 2013-03-03
相关资源
最近更新 更多