#define: Определяет макрос.- Макрос-константа: Простая текстовая подстановка.
#define BUFFER_SIZE 1024 // ... char buffer[BUFFER_SIZE]; // Заменится на char buffer[1024]; - Макрос-функция: Подстановка с параметрами. Важно использовать скобки!
#define SQUARE(x) ((x)*(x)) // Правильно #define BAD_SQUARE(x) x*x // Неправильно (проблемы с приоритетом) // ... int result = SQUARE(a + b); // Заменится на int result = ((a + b)*(a + b));- Преобразование в строку (
#): Оператор#перед параметром макроса-функции преобразует аргумент в строковый литерал.#define PRINT_VAR(var) printf(#var " = %d\n", var) // ... int count = 10; PRINT_VAR(count); // Превратится в printf("count" " = %d\n", count); // Выведет: count = 10 - Конкатенация токенов (
##): Оператор##“склеивает” два токена во время препроцессирования.
- Преобразование в строку (
- Макрос-константа: Простая текстовая подстановка.
#undef: Отменяет определение макроса.#undef BUFFER_SIZE#include: Вставляет содержимое указанного файла в текущий файл.#include <filename.h>: Поиск файла в стандартных системных каталогах.#include "filename.h": Поиск файла сначала в текущем каталоге, затем в стандартных.
- Директивы условной компиляции: Позволяют включать или исключать части кода из компиляции в зависимости от условий.
#if выражение: Если целочисленноевыражениене равно 0.#ifdef МАКРОС: ЕслиМАКРОСбыл определен через#define.#ifndef МАКРОС: ЕслиМАКРОСне был определен.#else: Альтернативный блок для#if,#ifdef,#ifndef.#elif выражение:else ifдля препроцессора.#elifdef МАКРОС:else ifdef.#elifndef МАКРОС:else ifndef.#endif: Завершает блок условной компиляции (#if,#ifdef,#ifndef).
#define DEBUG_MODE 1 #ifdef DEBUG_MODE printf("Debug message\n"); #else printf("Release message\n"); #endif
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰