Ц Препроцесор и макрои

У овом упутству ћете се упознати са ц претпроцесорима и научићете да користите #инцлуде, #дефине и условну компилацију уз помоћ примера.

Ц претпроцесор је макропроцесор (омогућава вам да дефинишете макронаредбе) који трансформише ваш програм пре него што је компајлиран. Ове трансформације могу бити укључивање датотеке заглавља, проширења макроа итд.

Све директиве за обраду почињу #симболом. На пример,

 #define PI 3.14

Неке од уобичајених употреба Ц претпроцесора су:

Укључујући датотеке заглавља: ​​#инцлуде

#includeПретпроцесор се користи да обухвати заглавља датотеке на Ц програма. На пример,

 #include 

Ево stdio.hдатотеке заглавља. #includeДиректива Претпроцесор замењује изнад линије са садржајем stdio.hзаглавље датотеке.

То је разлог зашто морате да користите #include да бисте могли да користите функције попут scanf()и printf().

Такође можете креирати сопствену датотеку заглавља која садржи декларацију функције и укључити је у свој програм користећи ову претпроцесорску директиву.

 #include "my_header.h"

Посетите ову страницу да бисте сазнали више о коришћењу заглавних датотека.

Макрои који користе #дефине

Макро је фрагмент кода којем је дато име. Макро у Ц можете дефинисати помоћу #defineпретпроцесорске директиве.

Ево примера.

 #define c 299792458 // speed of light

Овде, када користимо ц у нашем програму, он се замењује са 299792458.

Пример 1: #дефине препроцессор

 #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: Коришћење #дефине претпроцесора

 #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; )

Посетите ову страницу да бисте сазнали више о макроима и #дефине претпроцесору.

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

У програмирању на језику Ц можете упутити претпроцесору да ли треба укључити блок кода или не. Да би то учинили, могу се користити условне директиве.

Слично је 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 

#дефинед

Посебни оператор #дефинед користи се за тестирање да ли је одређени макро дефинисан или не. Често се користи са #иф директивом.

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

Унапред дефинисани макрои

Ево неколико предефинисаних макронаредби у програмирању на језику Ц.

Макро Вредност
__DATE__ Низ који садржи тренутни датум
__FILE__ Низ који садржи име датотеке
__LINE__ Цео број који представља тренутни број реда
__STDC__ Ако следи АНСИ стандард Ц, онда је вредност цео број који није нула
__TIME__ Низ који садржи тренутни датум.

Пример 3: Добијте тренутно време помоћу __ТИМЕ__

Следећи програм даје тренутно време помоћу __TIME__макронаредбе.

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

Оутпут

 Тренутно време: 19:54:39

Препоручена читања

  • Контрола линије
  • Прагме
  • Излаз претпроцесора
  • Остале директиве

Занимљиви Чланци...