Могут ли встроенные функциональные тела в ссылочных объектах C объявлены позже
Вопрос
Допустим, у меня есть две встроенные функции в заголовочном файле:
inline int foo() { return bar()+2; }
inline int bar() { return 3; }
Могу ли я предположить, что компилятор C99 встроит " foo " даже если «бар» объявлен позже? Предполагая, что никакое другое внутреннее правило, такое как тело функции к большому, не сработало.
Делают ли это реализации компиляторов c (популярные, например, Intel-C / Sun Studio / MSVC и gcc), даже если C99 оставляет это как опцию?
Решение
Пока функции должным образом прототипированы, не имеет значения, в каком порядке вы их объявляете.
Другие советы
inline
- это просто подсказка компилятору, и чаще всего она игнорируется в современных оптимизирующих компиляторах. Вы не можете предполагать, что-то встроено или нет. Некоторые компиляторы предоставляют прагмы, которые заставляют определенную функцию быть встроенной, если это вообще возможно (например, MSVC __ forceinline
). Если вам абсолютно необходимо знать, вы должны посмотреть на разборку вывода.
Тем не менее, для данного фрагмента любой приличный оптимизирующий компилятор вставит это, с inline
или без, при условии, что это один заголовок.