Препроцессор C и макросы

В этом руководстве вы познакомитесь с препроцессорами c и научитесь использовать #include, #define и условную компиляцию с помощью примеров.

Препроцессор C - это препроцессор макросов (позволяет вам определять макросы), который преобразует вашу программу перед ее компиляцией. Эти преобразования могут включать включение заголовочного файла, расширения макросов и т. Д.

Все директивы предварительной обработки начинаются с #символа. Например,

 #define PI 3.14

Некоторые из распространенных применений препроцессора C:

Включение файлов заголовков: #include

#includeПрепроцессор используется для включения заголовочных файлов в программах на языке Си. Например,

 #include 

Вот stdio.hзаголовочный файл. #includeДиректива препроцессора заменяет указанную выше строку с содержимым stdio.hзаголовка файла.

Вот почему вам нужно использовать, #include прежде чем вы сможете использовать такие функции, как scanf()и printf().

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

 #include "my_header.h"

Посетите эту страницу, чтобы узнать больше об использовании файлов заголовков.

Макросы с использованием #define

Макрос - это фрагмент кода, которому присвоено имя. Вы можете определить макрос на C с помощью #defineдирективы препроцессора.

Вот пример.

 #define c 299792458 // speed of light

Здесь, когда мы используем c в нашей программе, он заменяется на 299792458.

Пример 1: #define препроцессор

 #include #define PI 3.1415 int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0; )

Функция как макросы

Вы также можете определить макросы, которые работают аналогично вызову функции. Это называется макросом, подобным функции. Например,

 #define circleArea(r) (3.1415*(r)*(r))

Каждый раз, когда программа встречает circleArea(argument), он заменяется на (3.1415*(argument)*(argument)).

Предположим, мы передали 5 в качестве аргумента, затем он расширяется, как показано ниже:

 circleArea(5) expands to (3.1415*5*5)

Пример 2: Использование препроцессора #define

 #include #define PI 3.1415 #define circleArea(r) (PI*r*r) int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0; )

Посетите эту страницу, чтобы узнать больше о макросах и препроцессоре #define.

Условная компиляция

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

Это похоже на ifутверждение с одним важным отличием.

Оператор ifтестируется во время выполнения, чтобы проверить, должен ли выполняться блок кода или нет, тогда как условные выражения используются для включения (или пропуска) блока кода в вашу программу перед выполнением.

Uses of Conditional

  • use different code depending on the machine, operating system
  • compile same source file in two different programs
  • to exclude certain code from the program but to keep it as reference for future purpose

How to use conditional?

To use conditional, #ifdef, #if, #defined, #else and #elseif directives are used.

#ifdef Directive

 #ifdef MACRO // conditional codes #endif 

Here, the conditional codes are included in the program only if MACRO is defined.

#if, #elif and #else Directive

 #if expression // conditional codes #endif 

Here, expression is an expression of integer type (can be integers, characters, arithmetic expression, macros and so on).

The conditional codes are included in the program only if the expression is evaluated to a non-zero value.

The optional #else directive can be used with #if directive.

 #if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif 

Вы также можете добавить вложенное условие к своему #if… #elseиспользованию#elif

 #if expression // conditional codes if expression is non-zero #elif expression1 // conditional codes if expression is non-zero #elif expression2 // conditional codes if expression is non-zero #else // conditional if all expressions are 0 #endif 

#defined

Специальный оператор #defined используется для проверки, определен ли конкретный макрос или нет. Часто используется с директивой #if.

 #if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes 

Предопределенные макросы

Вот несколько предопределенных макросов в программировании на C.

Макрос Ценность
__DATE__ Строка, содержащая текущую дату
__FILE__ Строка, содержащая имя файла
__LINE__ Целое число, представляющее текущий номер строки
__STDC__ Если соответствует стандарту ANSI C, то значение является ненулевым целым числом
__TIME__ Строка, содержащая текущую дату.

Пример 3: Получить текущее время с помощью __TIME__

Следующая программа выводит текущее время с помощью __TIME__макроса.

 #include int main() ( printf("Current time: %s",__TIME__); )

Вывод

 Текущее время: 19:54:39

Рекомендуемая литература

  • Линия управления
  • Прагмы
  • Вывод препроцессора
  • Прочие директивы

Интересные статьи...