Въведение в предпроцесорните директиви в С

Най-често се прави като погрешно схващане, че Preprocessors или макроси са част от съставянето на програмата, но е напълно погрешно. Препроцесорните директиви са типът макроси и фаза преди компилация. Може да се каже, че това са някакъв набор от инструкции, дадени на компилатора за извършване на действителна компилация. Те са известни и като по-дълги съкращения на конструкции за макроси, което означава, че стойността в макросите се заменя със сегмента от кодове. Макросът се дефинира от специален символ и има символ, започващ с „#“. Следователно тези # define са вид специален препроцесор, последван от реалния компилатор. В тази тема ще научим за директивите за предпроцесорите в C.

Препроцесорът има специален тип представяне за неговата идентификация, като всяка директива на препроцесора се инициира от специален символ на „#“, последван от идентификатор и след това име на директивата. Разрешено е и бялото пространство преди и след #. Например, # включват.

Има определени приспособления или съоръжения, които C Preprocessor може да осигури:

  • Заглавни файлове: Включването на заглавни файлове е начин, по който декларациите могат да бъдат заменени от програмния синтаксис и програмното тяло.
  • Разширяване на макроса: Дефинирането на макроси са като съкращаване на парче код, който C препроцесор замества макросите със съответното им определение през целия период.
  • Компилация по условия: Според различни сценарии или различни условия включването на определени части от програмата е възможно чрез условно съставяне.
  • Контрол на линиите: Ако използвате програма за комбиниране или пренареждане на някой или повече изходни файлове в междинен файл за компилация, можете да използвате контрола на реда, за да информирате съставителя откъде произхожда всеки изходен ред.

Видове предпроцесорни директиви

Всички видове директиви за предпроцесорите са както следва:

  1. # дефинирайте
  2. # включват
  3. # ifdef
  4. # undef
  5. #ifndef
  6. # ако
  7. #else
  8. #elif
  9. # endif
  10. #error
  11. #pragma

1. #define (Макроси)

Макрос е кодов фрагмент, който се заменя с някаква стойност на кода на макроса. Всеки макрос е описан и дефиниран най-вече от директивата #define.

Синтаксис:

#define token value

Има два вида макроси:

  • Функция - като макроси
  • Макроси като обект
Функция - като макроси

Функцията like-macro работи почти като призив на функция.

Например:

#define MAX(a, b) ((a)>(b) ? (a): (b))

MAX тук е името на макроса.

Пример:

изход:

Макроси като обект

Обектните макроси са типът идентификатор, заменен със стойност. Използва се предимно за представяне на числови константи.

#define PI 3.1415

Тук стойността на PI ще бъде заменена от макроса.


изход:

2. #включвам

Има някои други функции за директивата за включване на препроцесора. Той има свои три варианта, които заместват кода с текущия код на изходните файлове.

Три варианта са следните:

  • #include
  • #include "файл"
  • Включете всичко друго

#include

Търси файл в определения списък на системата или директории, както е посочено, след това търси стандартен списък на системни библиотеки.

#include "файл"

Този тип се използва за вашите собствени персонализирани заглавни файлове на програмата. Извършва се търсене на файл с име на файл първо в текущата директория, последван от файлове със системни глави и текущи директории на текущия файл в директорията.

#включете нещо

Този тип директива за включване на препроцесора се използва, когато никой от останалите два типа директива и нейните аргументи не отговарят и не удовлетворяват изчислителната структура.

3. #Ifdef

Проверява дали макросът е дефиниран с # define или не. Ако да, тя ще изпълни кода, в противен случай няма.

Синтаксис:

#ifdef MACRO
(
Code body
)
#endif
#undef:

Отказът на дефиницията на макрос означава, че е неопределен и е предшестван с директива #undef.

Синтаксис:

#undef token

изход:

4. Ifndef

Този процесор проверява дали #define е дефиниран или не от #define. Ако да, той изпълнява кода.

Синтаксис:

#Ifndef MACRO
//code
#endif
#If

Този процесор работи като цикъл if, той оценява израза или състоянието. Ако условието id е вярно, то в противен случай ще изпълни кода.

Синтаксис:

#if expression
//code
#endif
#else

Директивата за препроцесора #else се използва за оценка на израза или състоянието, ако условието на #if е невярно. Може да се използва с директиви #if, #elif, #ifdef и #ifndef.

Синтаксис:

#if expression
//if body
#else
//else body
#endif

Пример:

изход:

5. #Error

Както подсказва името му, директивата за препроцесора за грешка се използва за посочване на грешка и след това компилаторът дава фатална грешка, ако се намери директива за грешка и пропусне следващите стъпки за компилация.

изход:

6. #прагма

Зависи от компилатора, тъй като различните ОС и различните машини предоставят всички видове функции на операционната система, които се използват от компилатора, за да предлагат допълнителна информация на компилатора.

Синтаксис:

#pragma token

Пример:

изход:

Всеки препроцесор има своето значение като условната директива се използва за проверка дали част от програмата трябва да се вземе предвид въз основа на сценарии или не.

Да предположим, че една програма иска да се компилира в определена среда със специфичната конфигурация на Операционната система, но веднага щом премине към тази фаза на компилация, тя хвърля грешка или може да даде невалиден код, просто давайки на програмата си възможност за голямо не да свържете програмата и да я стартирате по време на изпълнение. Може да има и друга възможност, когато един и същ изходен файл с две различни програми може да направи отнемаща време проверка на последователност или неговите непосредствени данни или да отпечата стойностите на данните с отстраняване на грешки.

Също така тези сценарии, които трябва да бъдат създадени с изчисления, могат да се използват и за работа на една машина, като се използват директиви за предварително обработване.

заключение

Изходът от C Preprocessor прилича много на входа, с изключение на това, че всички директиви за предварителна обработка са заменени с празни линии или празни пространства. Различните файлове и формати имат различни синтаксиси, които казват, че стартирането на нов файл е направено или показващо връщане към файл или обработка трябва да се извърши преди компилация.

Всички сценарии се използват, за да информират другите за силата на препроцесора на C и как той се развива с различни версии на компилатора, стартирани със стандартите GCC и ANSI.

Препоръчителни статии

Това е ръководство за директивите за препроцесори в C. Тук обсъждаме видовете препроцесорни директиви със синтаксис и примери. Може да разгледате и следните статии, за да научите повече-

  1. Обратен номер в С
  2. Сортиране в С
  3. Функция на хеширане в С
  4. Продължете изявлението в С
  5. Сортиране в C #
  6. Как функционира хеширането във php?