【问题标题】:Inline function in other inline function in CC中其他内联函数中的内联函数
【发布时间】:2010-05-01 17:09:40
【问题描述】:

请问这个代码:

inline int funcA(int a) __attribute__((always_inline))
{
    return a + 1;
}
inline int funcB(int b) __attribute__((always_inline))
{
    return funcA(b + 2);
}
int main()
{
    return funcB(3);
}

转换成这样的代码?:

int main()
{
   return ((3) + 2) + 1;
}

GCC、ARM (iPhone)

【问题讨论】:

    标签: c inline-functions


    【解决方案1】:

    内联函数调用不是该语言需要编译器做的事情。这是一个实施质量问题 (QoI)。但是 GCC、MSVC 和 clang 中的任何一个都可以。当然,您必须启用优化。

    例如

    # clang++ -cc1 -emit-llvm -O2 -o - main.cpp
    define i32 @main() nounwind readnone {
    entry:
      ret i32 6
    }
    

    【讨论】:

    • 我喜欢它实际上是内联的,然后又进行了一次传递并评估了常量...干得好铿锵。
    【解决方案2】:

    使用inline 时无法保证。它仅作为对编译器的提示(在许多(不是所有)情况下,编译器比程序员更能启发和更好地理解内联的影响)。

    【讨论】:

      【解决方案3】:

      不一定。这取决于我猜的编译器和设置。事实上,例如在 C++ 中,它甚至不能保证这个

      inline int funcA(int a)
      {
          return a + 1;
      }
      int main()
      {
          return funcA(3);
      }
      

      会变成这个

      int main()
      {
          return 3 + 1;
      }
      

      inline 只是编译器的提示。编译器可以忽略它。

      【讨论】:

      • 但是你可以强制编译器(GCC)这样做:inline void foo (void) __attribute__((always_inline));
      猜你喜欢
      • 2023-03-10
      • 2011-03-07
      • 2019-03-24
      • 2017-01-05
      • 2011-08-23
      • 1970-01-01
      相关资源
      最近更新 更多