Директива #ifdef
Директива #ifdef - это директива препроцессора,
которая проверяет, было ли ранее определено указанное
имя макроса. Если макрос определён, препроцессор
включает в компиляцию код, расположенный между
#ifdef и соответствующей директивой
#endif. Если макрос не определён, этот блок
кода полностью исключается из компиляции.
Директива #ifdef принимает один параметр -
имя проверяемого макроса. Она часто используется
для защиты заголовочных файлов от повторного
включения, для организации платформозависимого
кода и для включения или отключения отладочного
вывода. Парной директивой является #ifndef,
которая срабатывает, когда макрос, наоборот,
не определён.
Синтаксис
#ifdef NAME
// код, который компилируется, если NAME определён
#endif
Также можно использовать ветку #else для кода,
который должен компилироваться, если макрос
не определён:
#ifdef NAME
// код, если NAME определён
#else
// код, если NAME не определён
#endif
Пример
Давайте определим макрос DEBUG с помощью
директивы #define и проверим его наличие
директивой #ifdef:
#include <iostream>
using namespace std;
#define DEBUG
int main()
{
#ifdef DEBUG
cout << "Debug mode is on" << endl;
#else
cout << "Debug mode is off" << endl;
#endif
return 0;
}
Результат выполнения кода:
"Debug mode is on"
Пример
Теперь закомментируем директиву #define,
чтобы макрос DEBUG не был определён,
и посмотрим на результат:
#include <iostream>
using namespace std;
// #define DEBUG
int main()
{
#ifdef DEBUG
cout << "Debug mode is on" << endl;
#else
cout << "Debug mode is off" << endl;
#endif
return 0;
}
Результат выполнения кода:
"Debug mode is off"
Пример
Директиву #ifdef удобно использовать для
подключения разных версий одной и той же функции
в зависимости от платформы. Давайте подключим
разные реализации в зависимости от того,
определён ли макрос WINDOWS:
#include <iostream>
using namespace std;
#define WINDOWS
void printPlatform()
{
#ifdef WINDOWS
cout << "Running on Windows" << endl;
#else
cout << "Running on Linux" << endl;
#endif
}
int main()
{
printPlatform();
return 0;
}
Результат выполнения кода:
"Running on Windows"