Встроенная функция в другой встроенной функции в C - PullRequest
1 голос
/ 01 мая 2010

Будет ли этот код:

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)

Ответы [ 3 ]

2 голосов
/ 01 мая 2010

Встроенные вызовы функций - это не то, что язык требует от компиляторов. Это вопрос качества реализации (QoI). Но любой из GCC, MSVC и clang сделает это. Конечно, вы должны включить оптимизацию.

Например

# clang++ -cc1 -emit-llvm -O2 -o - main.cpp
define i32 @main() nounwind readnone {
entry:
  ret i32 6
}
0 голосов
/ 01 мая 2010

Не обязательно. Это зависит от компилятора и настроек, я думаю. На самом деле в C ++, например, даже не гарантируется, что это

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

превратится в это

int main()
{
    return 3 + 1;
}

inline - это просто подсказка для компилятора. Компилятор может игнорировать это.

0 голосов
/ 01 мая 2010

Нет гарантий при использовании inline.Он служит просто подсказкой для компилятора (который во многих (не во всех) случаях имеет больше эвристики и лучше понимает влияние встраивания, чем программист).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...