1

このコードは次のようになります:

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)

4

3 に答える 3

2

関数呼び出しのインライン化は、言語がコンパイラに要求するものではありません。これは実装の品質 (QoI) の問題です。しかし、GCC、MSVC、およびclangのいずれかで実行できます。もちろん、最適化を有効にする必要があります。

例えば

# clang++ -cc1 -emit-llvm -O2 -o - main.cpp
define i32 @main() nounwind readnone {
entry:
  ret i32 6
}
于 2010-05-01T17:12:57.897 に答える
0

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

于 2010-05-01T17:12:44.540 に答える
0

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

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

これに変身します

int main()
{
    return 3 + 1;
}

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

于 2010-05-01T17:14:42.460 に答える