В препроцессор в C ++ это инструмент, который обрабатывает код перед его компиляцией компилятором. Он выполняет множество задач, таких как включение заголовочных файлов, условная компиляция, подстановка текста, удаление комментариев и т.д. Препроцессор также позволяет разработчикам выбирать, какие части кода следует включать или исключать.

Все директивы препроцессора начинаются с новой строки и символа #, а заканчиваются переходом на следующую строку (а не точкой с запятой, как инструкции).

Директивы препроцессора в C ++

В C++ директивы препроцессора — это специальные команды, которые используются для управления препроцессором. Они начинаются с символа ‘#’ и указывают препроцессору на необходимость изменения исходного кода перед компиляцией. В C++ существуют различные директивы препроцессора для выполнения разных операций.

В приведенной ниже таблице перечислены часто используемые директивы препроцессора:

Директива Описание
#include Связывает заголовочный файл с исходным кодом.
#define Создает символическую или макроконстанту.
#undef Удаляет макрос, который уже был определен.
#if / #elif / #else / #endif Компиляция, которая является условной и основана на некотором выражении.
#ifdef / #ifndef Компиляция, зависящая от наличия или отсутствия макроса.
#error Останавливает процесс компиляции и выдает уведомление об ошибке.
#warning Во время компиляции отображается предупреждение.
#pragma Предоставьте компилятору конкретные инструкции

#include

Директива препроцессора #include используется для включения содержимого одного файла в текущий. Используйте директиву #include. Header files  часто включаются с помощью этой директивы.

Синтаксис

Первый синтаксис включает файлы из системного каталога, а второй — файлы из каталога, в котором в данный момент находится исходный файл.

Пример

output

#define

Директива препроцессора #define используется для определения макросов. Имена макросов являются символическими и могут использоваться для представления константных значений или коротких фрагментов кода. Использование препроцессора #define делает наш код более читаемым и удобным для сопровождения, поскольку мы можем заменить числа и фрагменты кода осмысленными именами.

Синтаксис

Example

output

#undef 

Директива препроцессора #undef используется для отмены ранее определённого макроса (определённого с помощью #define). В основном она используется в тех случаях, когда мы хотим переопределить существующий макрос или удалить связанное с ним определение макроса из кода.

Синтаксис

Пример
output

 #if, #elif, #else и #endif (условные директивы)

Директивы #if, #elif, #else, #endif, и #error являются условными директивами препроцессора, которые используются для условной компиляции. Они используются для включения или исключения кода на основе заданных условий.

Синтаксис

Пример

output

Объяснение: этот код использует директивы препроцессора для проверки того, определены ли определённые макросы (PI и SQUARE). Поскольку PI определён, программа выводит «PI определён», затем проверяет, определён ли SQUARE, который не определён, поэтому ничего не выводит.

#ifdef и #ifndef

Директивы препроцессора #ifdef и #ifndef используются для условной компиляции. #ifndef проверяет, что макрос не определён, #ifdef проверяет, что макрос определён.

Синтаксис

#ifdef и #ifndef часто используются с директивой #endif для включения или исключения фрагментов кода в зависимости от того, определён ли определённый макрос.

Пример

output

#error

Директива #error — это директива препроцессора, которая используется для вывода пользовательского сообщения об ошибке компиляции. Если какое-либо условие не выполняется или какое-либо конкретное требование не удовлетворено, мы можем остановить процесс компиляции с помощью #error.

Синтаксис

Здесь, error_message это пользовательское сообщение об ошибке, которое вы хотите напечатать, когда #error .

Пример

output

#warning

Директива препроцессора #warning используется для создания предупреждающего сообщения во время компиляции. Мы можем писать собственные предупреждающие сообщения, которые обычно используются в информационных или отладочных целях. Компилятор выводит предупреждающее сообщение в консоль, чтобы сообщить о любом необходимом условии или решениях, принятых на этапе предварительной обработки.

Синтаксис

Здесь сообщение — это любое пользовательское сообщение, которое вы хотите распечатать в виде оповещения.

Пример

output

Примечание: предупреждающее сообщение выводится при компиляции кода на выходе компилятора или в консоли. Оно зависит от компилятора. Следовательно, способ отображения предупреждения зависит от используемого вами компилятора.

#pragma

Директива #pragma — это инструкции для компилятора. Специальные инструкции для компилятора предоставляются с помощью директивы #pragma. Она может использоваться для изменения параметров компилятора, отключения предупреждений и т. д. Поддерживаемые прагмы могут различаться в зависимости от компилятора.

Синтаксис

Часто используемые флаги #pragma

  • #pragma once: используется для включения защиты заголовочных файлов.
  • #pragma message: используется для вывода пользовательских сообщений во время компиляции.
  • #pragma warning: используется для управления поведением предупреждений (например, для включения или отключения предупреждений).
  • #pragma optimize: используется для управления настройками оптимизации (управления уровнем оптимизации).
  • #pragma comment: используется для включения дополнительной информации в объектный файл (или указания параметров компоновщика).

Пример

output