Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

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

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

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

<рисунок>

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

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

#define PI 3.14

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

<час>

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

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

#include <stdio.h>

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

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

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

#include "my_header.h"

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

<час>

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

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

Вот пример.

#define c 299792458  // speed of light

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

<час>

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

#include <stdio.h>
#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 <stdio.h>
#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 оператор проверяется во время выполнения, чтобы проверить, должен ли выполняться блок кода или нет, тогда как условные операторы используются для включения (или пропуска) блока кода в вашей программе перед выполнением.

<час>

Использование условного выражения

<час>

Как использовать условное выражение?

Чтобы использовать условное обозначение, #ifdef , #if , #defined , #else и #elif используются директивы.

<час>

Директива #ifdef

#ifdef MACRO     
   // conditional codes
#endif

Здесь условные коды включаются в программу, только если MACRO определено.

<час>

Директива #if, #elif и #else

#if expression
   // conditional codes
#endif

Здесь выражение является выражением целочисленного типа (могут быть целыми числами, символами, арифметическими выражениями, макросами и т. д.).

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

Необязательный #else директива может использоваться с #if директива.

#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 используется для проверки того, определен ли определенный макрос или нет. Часто используется с #if. директива.

#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048
  // codes
<час>

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

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

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

Пример 3. Получение текущего времени с помощью __TIME__

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

#include <stdio.h>
int main()
{
   printf("Current time: %s",__TIME__);   
}

Вывод

Current time: 19:54:39
<час>

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


Язык C

  1. Сводка R, L и C
  2. Ключевые слова и идентификаторы C#
  3. Класс и объект С#
  4. Абстрактный класс и метод С#
  5. Частичный класс C# и частичный метод
  6. Запечатанный класс и метод С#
  7. Директивы препроцессора C#
  8. C Ключевые слова и идентификаторы
  9. C — константы и литералы
  10. C - Вход и выход