質問

このコードは次のとおりです。

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、アーム(iPhone)

役に立ちましたか?

解決

関数呼び出しのインラインは、言語がコンパイラに必要とするものではありません。実装の品質(QOI)です。しかし、GCC、MSVC、Clangのいずれかがそれを行います。もちろん、最適化を有効にする必要があります。

例えば

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

他のヒント

使用する際に保証はありません inline. 。これは、単にコンパイラ(多くの場合ではない)がより多くのヒューリスティックを持ち、プログラマーよりもインランスの影響をよりよく理解している)のヒントとして単に機能します。

必ずしも。コンパイラと設定に依存します。実際、C ++では、これがこれを保証することすら保証されていません

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

これに変換されます

int main()
{
    return 3 + 1;
}

インラインは、コンパイラのヒントにすぎません。コンパイラはそれを無視できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top