Встраивание функций
Спецификатор inline
Спецификатор inline позволяет определить функцию как встраиваемую, то есть подставляемую в текст программы в местах обращения к этой функции.
Обрабатывая каждый вызов функции, компилятор подставляет на место ее вызова - в текст программы - код операторов тела функции. Тем самым при многократных вызовах подставляемой функции, размер программы может увеличиться, однако исключаются временные затраты на обращение к вызываемой функции и возврат из нее в основную функцию программы.
Случается так, что компилятор не может определить функцию, как встраиваемую и просто игнорирует ключевое слово inline. Перечислим причины, которые приводят к такому результату:
- Слишком большой размер функции.
- Функция является рекурсивной. (с этим понятием вы познакомитесь в следующих уроках)
- Функция повторяется в одном и том же выражении несколько раз
- Функция содержит цикл, switch или if.
Как видите - всё просто, но inline-функции не единственный способ встраивания.
Раскрытие макро
Помимо вызова функции, для встраивания в программу повторяющегося фрагмента используют, так называемое, раскрытие макро. Для этих целей применяется директива Препроцессора #define, со следующим синтаксисом:
#define Имя_макроса(Параметры) (Выражение)
Пример.
#include <iostream> #define SQR(X) ((X) * (X)) #define CUBE(X) (SQR(X)*(X)) #define ABS(X) (((X) < 0)? -(X) : X) using namespace std; void main() { у = SQR(t + 8) - CUBE(t - 8) ; cout <<sqrt(ABS(y)) ; }
- C помощью директивы #define объявляются три макроса sqr(x), cube(x) и abs(x).
- В функции main происходит вызов вышеописанных макросов по имени.
- Препроцессор раскрывает макро (т. е. подставляет на место вызова выражение из директивы #define) и передает получившийся текст компилятору.
- После встраивания выражение в main выглядит для программы таким образом:
у = ((t+8) * (t+8)) - ((((t-8)) * (t-8)) * (t-8)); cout << sqrt(((y < 0)? -(y) : y));
#define SQR(X) X * X у = SQR(t + 8); //раскроет макро t+8*t+8
В примере при вызове макроса SQR сначала выполнится умножение 8 на t, а потом к результату прибавится значение переменной t и восьмерка, хотя очевидно, что нашей целью было получение квадрата суммы t+8.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах