Поделиться через


Встроенные функции

Ключевое слово inline — это описатель функции, который указывает компилятору заменить код в определении функции для каждого экземпляра вызова функции.

Замечания

Подстановка во встроенном коде выполняется только по решению компилятора. Например, компилятор не подставляет функцию, если ее адрес был получен или если она слишком велика для подстановки. Если компилятор не подставляет функцию, определенную в файле заголовка, для компоновщика создается соответствующая пометка, чтобы избежать нарушений правила единственного определения (ODR).

Чтобы функция рассматривалась в качестве кандидата на подстановку, она должна использовать новый стиль определения функции и сигнатуру, которая объявляет тип возвращаемого значения и типы всех параметров.

Используйте следующую форму для определения встраиваемой функции:

inlineопределение функции

Встроенные функции создают более быстрый и часто более компактный код, чем эквивалентные вызовы функций.

  • Встроенные функции избавляют от затрат времени на подготовку стека для аргументов и возвращаемого значения, а также на передачу и возврат управления.

  • Даже если встроенная функция повторяется несколько раз, при небольшом (скажем, до трех строк кода) размере она создает меньше кода, чем соответствующий вызов функции, потому что компилятор не генерирует код для обработки аргументов и возвращаемого значения.

  • Компилятор может применять к встроенным функциям некоторые оптимизации, которые недоступны для обычных функций. Компилятор обычно не выполняет оптимизации между разными процедурами.

Не путайте функции, которые используют inline, со встроенным кодом на ассемблере. Дополнительные сведения о встроенном коде на ассемблере можно получить в статье Встроенный ассемблер.

Только для систем Майкрософт

Кроме того, Майкрософт поддерживает ключевые слова __inline и __forceinline, позволяющие указать компилятору заменить код в определении функции для каждого экземпляра вызова функции. Ключевое слово __inline является синонимом для inline. Ключевое слово __forceinline указывает компилятору ослабить ограничения эвристических данных о том, следует ли встраивать функцию. Но это не гарантирует того, что функция будет встроена.

Для совместимости с предыдущими версиями _inline и _forceinline являются синонимами __inline и __forceinline, соответственно, если не указан параметр компилятора /Za (отключение расширений языка).

ОКОНЧАНИЕ Только для систем Майкрософт

См. также

inline, , __inline__forceinline