РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
35 of 815 menu

Директива #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"

Смотрите также

  • директива #ifndef,
    которая проверяет, что макрос не определён
  • директива #define,
    которая определяет макрос
  • директива #endif,
    которая закрывает блок условной компиляции
  • директива #undef,
    которая отменяет определение макроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить