C Програмиране

Макро на C език

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

Обмислете следния код:

СТАРТ
ИНТЕГЛ n = 5;
PRINT ("Стойността на n е% d", n);
КРАЙ

Горният код не е валиден C код.

Но следният код е валиден:

// Пример1.° С
#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
СТАРТ
ИНТЕГЛ n = 5;
PRINT ("Стойността на n е% d", n);
КРАЙ

Преди компилирането макросът START, INTEGER, PRINT и END е заменен от тяхната стойност и кодът става валиден C код. Можем да проверим със следната команда:

gcc -E Пример1.° С

Тази команда ще се покаже след разширяване на всички макроси.

Сега ще видим различни видове макроси:

1. Обектоподобни макроси:

Синтаксис:

#define име на макрос_макро_значение

Ако макросът заема повече от един ред, можем да го направим, както следва:

#define име на макрос_макро_значение1 \
macro_value2 \
macro_value3
#define MAX 200

Този макрос изглежда като обект на данни, поради което този тип макрос се извиква като обект-подобен макрос.

// Пример2.° С
// # включвам
#define MAX 200
int main ()

printf ("МАКС. стойност е:% d", МАКС);
връщане 0;

В Пример2.c, МАКС е макрос. От резултата наблюдаваме това МАКС се заменя със стойността му 200.

2. Функционални макроси:

Синтаксис:

#define macro_name () macro_value

име на макрос е дефинирано от потребителя име на макроса. Двойка скоби трябва да се постави след име на макрос. Между тях не е позволено интервал име на макрос и скоби. Също така можем да предаваме аргументи в този тип макроси.

#define add (x, y) x + y

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

// Пример3.° С
#define add (x, y) x + y
int main ()

int a;
плувка b;
a = добавяне (4,5);
b = добавяне (2.5,3.6)
връщане 0;

В Пример3.° С, видяхме, че за разлика от функцията на C, макросът замества само кода с аргументи, без да го изчислява. Така че, можем да предадем различен тип данни, използвайки един и същ макрос.

Ако поставим интервал между името на макроса и скобите, той работи по същия начин като макрос, подобен на обект. По-долу пример C илюстрира това.

// Пример4.° С
#define add (x, y) x + y
int main ()

int a;
плувка b;
a = добавяне (4,5);
b = добавяне (2.5,3.6)

В Пример4.c, видяхме, че добавянето на макрос се заменя с (x, y) x + y . Същият като обект-подобен макрос.

3. Макрос за поставяне на токени:
На език C, операторът ## се използва за поставяне на токени. Използвайки този оператор, можем да комбинираме два валидни маркера в един валиден маркер.
Пример:

// Пример5.° С
#define MARGE (x, y) x ## y
int main ()

int num = MARGE (52,34);
връщане 0;

Ако се опитаме да поставим токен, който не генерира валиден маркер, C компилаторът дава грешка или предупреждение.

// Пример6.° С
#define MARGE (x, y) x ## y
int main ()

int num = MARGE (52, +);
връщане 0;

В Пример 6.° С, имаме съобщение за грешка, защото след комбинация от два маркера получаваме невалиден маркер '52 + '.

4. Макрос за стринизиране:
На език C операторът # се използва за преобразуване на макро параметър в низова константа. Когато оператор # предшества с параметър на макрос, параметърът се преобразува в низов литерал. Стринизирането може да се използва за обектни и функционални макроси.
Пример:

// Пример7.° С
#define STRINGIZING (x) #x
int main ()

printf (STRINGIZING (Hello World));
връщане 0;

В Пример7.° С имаме низ „Hello World”, използващ STRINGIZING макрос.

Заключение:

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

OpenTTD срещу Simutrans
Създаването на собствена транспортна симулация може да бъде забавно, релаксиращо и изключително примамливо. Ето защо трябва да сте сигурни, че изпробв...
Урок за OpenTTD
OpenTTD е една от най-популярните бизнес симулационни игри там. В тази игра трябва да създадете прекрасен транспортен бизнес. Въпреки това, ще започне...
SuperTuxKart за Linux
SuperTuxKart е страхотно заглавие, създадено да ви предостави безплатно изживяването на Mario Kart във вашата Linux система. Играта е доста предизвика...