Могут ли встроенные функциональные тела в ссылочных объектах C объявлены позже - PullRequest
2 голосов
/ 30 ноября 2009

Допустим, у меня есть две встроенные функции в заголовочном файле:

inline int foo() { return bar()+2; }
inline int bar() { return 3; }

Могу ли я предположить, что компилятор C99 встроит "foo", даже если 'bar' будет объявлен позже? Предполагая, что никакое другое внутреннее правило, такое как тело функции к большому, не сработало.

Делают ли это реализации компиляторов c (популярные, например, Intel-C / Sun Studio / MSVC и gcc), даже если C99 оставляет это в качестве опции?

Ответы [ 2 ]

3 голосов
/ 30 ноября 2009

До тех пор, пока функции правильно прототипированы, не имеет значения, в каком порядке вы их объявляете.

3 голосов
/ 30 ноября 2009

inline - это просто подсказка компилятору, и чаще всего она игнорируется в современных оптимизирующих компиляторах. Вы не можете предполагать, что-то встроено или нет. Некоторые компиляторы предоставляют прагмы, которые заставляют определенную функцию быть встроенной, если это вообще возможно (например, MSVC __forceinline). Если вам абсолютно необходимо знать, вы должны посмотреть на разборку вывода.

Тем не менее, для данного фрагмента любой приличный оптимизирующий компилятор вставил бы это, с inline или без, при условии, что это один заголовок.

...