Директива #define
Директива #define является директивой препроцессора и создает
макрос - именованную замену фрагмента кода. Препроцессор обрабатывает
директиву до начала компиляции: везде в исходном коде, где встречается
имя макроса, оно будет заменено на указанный текст. В первом параметре
мы передаем имя макроса, а во втором - текст, на который это имя
следует заменить. Если второй параметр отсутствует, макрос просто
определяется без значения и может использоваться для условной
компиляции.
Различают макросы-константы и макросы-функции. Макрос-функция принимает параметры, которые подставляются в тело макроса при раскрытии. Важно помнить, что препроцессор выполняет чисто текстовую замену и не проверяет типы, поэтому макросы требуют аккуратного использования.
Синтаксис
#define NAME value
#define NAME(params) body
Пример
Давайте определим макрос-константу и используем его в программе:
#include <iostream>
using namespace std;
#define PI 3.14
int main()
{
double res = PI * 2;
cout << res << endl;
return 0;
}
Результат выполнения кода:
6.28
Пример
Давайте определим макрос-функцию, которая возвращает квадрат числа:
#include <iostream>
using namespace std;
#define SQUARE(x) ((x) * (x))
int main()
{
int res = SQUARE(5);
cout << res << endl;
return 0;
}
Результат выполнения кода:
25
Пример
Давайте определим макрос без значения и применим его вместе с
директивой #ifdef для условной компиляции:
#include <iostream>
using namespace std;
#define DEBUG
int main()
{
#ifdef DEBUG
cout << "debug mode" << endl;
#else
cout << "release mode" << endl;
#endif
return 0;
}
Результат выполнения кода:
"debug mode"