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

StackOverflow https://stackoverflow.com/questions/1817950

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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 или без, при условии, что это один заголовок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top