У овом упутству ћете се упознати са ц претпроцесорима и научићете да користите #инцлуде, #дефине и условну компилацију уз помоћ примера.
Ц претпроцесор је макропроцесор (омогућава вам да дефинишете макронаредбе) који трансформише ваш програм пре него што је компајлиран. Ове трансформације могу бити укључивање датотеке заглавља, проширења макроа итд.
Све директиве за обраду почињу #
симболом. На пример,
#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
Препоручена читања
- Контрола линије
- Прагме
- Излаз претпроцесора
- Остале директиве