Ц Програмирање

Макро на језику Ц

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

Узмите у обзир следећи код:

ПОЧЕТАК
ИНТЕГЕР н = 5;
ПРИНТ („Вредност н је% д“, н);
КРАЈ

Горњи код није важећи Ц.

Али следећи код је важећи:

// Пример1.ц
#дефине СТАРТ инт маин ()
#дефине ЕНД
#дефине ИНТЕГЕР инт
#дефине ПРИНТ (А, Б) принтф (А, Б)
ПОЧЕТАК
ИНТЕГЕР н = 5;
ПРИНТ („Вредност н је% д“, н);
КРАЈ

Пре компилације, макро СТАРТ, ИНТЕГЕР, ПРИНТ и ЕНД су замењени њиховом вредношћу, а код постаје важећи Ц код. Можемо проверити помоћу следеће команде:

гцц -Е Пример1.ц

Ова наредба ће се приказати након проширења свих макронаредби.

Сада ћемо видети различите врсте макронаредби:

1. Макрони налик објектима:

Синтакса:

#дефине мацро_наме мацро_валуе

Ако макро заузима више линија, можемо то учинити на следећи начин:

#дефине мацро_наме мацро_валуе1 \
мацро_валуе2 \
мацро_валуе3
#дефине МАКС 200

Овај макро изгледа као објект података због чега се ова врста макроназива назива макро налик објекту.

// Пример2.ц
// # укључује
#дефине МАКС 200
инт маин ()

принтф ("МАКС вредност је:% д", МАКС);
ретурн 0;

У Екапмле2.ц, МАКС је макро. Из резултата то примећујемо МАКС замењује се његовом вредношћу 200.

2. Макрони налик функцијама:

Синтакса:

#дефине мацро_наме () мацро_валуе

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

#дефине адд (к, и) к + и

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

// Пример3.ц
#дефине адд (к, и) к + и
инт маин ()

инт а;
флоат б;
а = додај (4,5);
б = додај (2.5,3.6)
ретурн 0;

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

Ако ставимо размак између имена макронаредбе и заграде, он функционише исто као макро налик објекту. Испод пример Ц илустрира ово.

// Пример4.ц
#дефине адд (к, и) к + и
инт маин ()

инт а;
флоат б;
а = додај (4,5);
б = додај (2.5,3.6)

У примеру4.ц, видели смо да је макро додатак замењен са (к, и) к + и . Исто као објектни макро.

3. Макро за лепљење токена:
На језику Ц, оператор ## се користи за лепљење токена. Коришћењем овог оператора можемо комбиновати два важећа токена у један важећи жетон.
Пример:

// Пример5.ц
#дефине МАРГЕ (к, и) к ## и
инт маин ()

инт нум = МАРГЕ (52,34);
ретурн 0;

Ако покушамо лепити токен који не генерише важећи токен, Ц компајлер даје грешку или упозорење.

// Пример6.ц
#дефине МАРГЕ (к, и) к ## и
инт маин ()

инт нум = МАРГЕ (52, +);
ретурн 0;

У Пример6.ц, имамо поруку о грешци јер након комбинације два токена добијамо неважећи токен '52 + '.

4. Макро за низање:
У језику Ц, оператор # користи се за претварање параметра макронаредбе у константу низа. Када оператор # претходи параметру макронаредбе, параметар се претвара у литерал низа. Стрингизирање се може користити за макроне налик објектима и функцијама.
Пример:

// Пример7.ц
#дефине СТРИНГИЗИНГ (к) #к
инт маин ()

принтф (СТРИНГИЗИНГ (Хелло Ворлд));
ретурн 0;

У Пример7.ц добили смо низ „Хелло Ворлд“ користећи СТРИНГИЗИНГ мацро.

Закључак:

Овај чланак је научио о свим врстама макро-сличних Макрои налик објектима, Макрони налик функцији, Макро за лепљење токена, Макро за низање и Макро за низање на језику Ц. Сада без икакве сумње можемо користити макро у нашем Ц програму.

Како користити Ксдотоол за подстицање кликова мишем и притиска тастера у Линуку
Ксдотоол је бесплатан алат за командну линију отвореног кода за симулацију кликова мишем и притиска тастера. Овај чланак ће покрити кратак водич о кор...
Топ 5 ергономских производа за рачунарски миш за Линук
Да ли дуготрајна употреба рачунара изазива бол у зглобу или прстима? Патите ли од укочених зглобова и стално морате да се рукујете? Да ли осећате гору...
Како променити поставке миша и додирне табле помоћу Ксинпут-а у Линук-у
Већина Линук дистрибуција подразумевано испоручује библиотеку „либинпут“ за обраду улазних догађаја на систему. Може да обрађује улазне догађаје и на ...