Директива #if
Директива #if относится к директивам препроцессора C++ и позволяет компилятору включать или исключать блоки кода до начала основной компиляции. В качестве параметра директива принимает константное выражение, вычисляемое препроцессором. Если выражение истинно (не равно 0), код между #if и соответствующей директивой #endif участвует в компиляции. Если выражение ложно (равно 0), этот код игнорируется. Дополнительно можно использовать ветви #elif и #else для организации множественных условий.
Синтаксис
#if константное_выражение
// код, который компилируется, если выражение истинно
#elif другое_выражение
// код, который компилируется, если первое ложно, а второе истинно
#else
// код, который компилируется, если все предыдущие условия ложны
#endif
Пример
Давайте включим один из двух блоков кода в зависимости от значения макроса VERSION:
#include <iostream>
using namespace std;
#define VERSION 2
int main()
{
#if VERSION == 1
cout << "Version 1" << endl;
#elif VERSION == 2
cout << "Version 2" << endl;
#else
cout << "Unknown version" << endl;
#endif
return 0;
}
Результат выполнения кода:
"Version 2"
Пример
Давайте проверим, определён ли макрос DEBUG, и выведем отладочное сообщение только при его наличии:
#include <iostream>
using namespace std;
#define DEBUG
int main()
{
#if defined(DEBUG)
cout << "Debug mode" << endl;
#else
cout << "Release mode" << endl;
#endif
return 0;
}
Результат выполнения кода:
"Debug mode"
Пример
Давайте сравним числовое значение макроса LEVEL с порогом и выберем соответствующий блок:
#include <iostream>
using namespace std;
#define LEVEL 5
int main()
{
#if LEVEL > 3
cout << "High level" << endl;
#else
cout << "Low level" << endl;
#endif
return 0;
}
Результат выполнения кода:
"High level"