C Програмування

Макрос мовою C

Макрос мовою C
Макрос мовою C - це фрагмент коду, якому присвоєно ім'я. Коли ім'я використовується де-небудь в програмі, значення макроса замінюється перед компіляцією програми. У цій статті ми детально побачимо, як написати макрос мовою C.

Розглянемо такий код:

СТАРТ
ЦІЛИЙ n = 5;
PRINT ("Значення n дорівнює% d", n);
КІНЕЦЬ

Наведений вище код не є дійсним кодом C.

Але дійсний наступний код:

// Приклад1.c
#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.c

Ця команда з’явиться після розгортання всіх макросів.

Тепер ми побачимо різні типи макросів:

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

Синтаксис:

#define_name_name macro_value

Якщо макрос займає більше одного рядка, ми можемо зробити це наступним чином:

#define_name_name macro_value1 \
macro_value2 \
macro_value3
#define MAX 200

Цей макрос виглядає як об’єкт даних, тому цей тип макросу викликається як об’єктоподібний макрос.

// Приклад2.c
//#включати
#define MAX 200
int main ()

printf ("МАКС. значення:% d", МАКС.);
повернути 0;

В Приклад 2.c, МАКС є макросом. З результатів ми спостерігаємо це МАКС замінюється його значенням 200.

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

Синтаксис:

#define macro_name () macro_value

ім'я_макросу - це визначене користувачем ім'я макросу. Пару дужок потрібно поставити після ім'я_макросу. Між ними не допускається пробіл ім'я_макросу та дужки. Ми також можемо передавати аргументи в цьому типі макросів.

#define add (x, y) x + y

Цей макрос виглядає як виклик функції, тому цей тип макросу називається функціональним.

// Приклад3.c
#define add (x, y) x + y
int main ()

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

У прикладі 3.c, ми бачили, що на відміну від функції C, макрос замінює лише код аргументами без його обчислення. Отже, ми можемо передавати різні типи даних, використовуючи один і той же макрос.

Якщо ми ставимо пробіл між іменем макроса та дужкою, він працює так само, як макрос, схожий на об'єкт. Нижче приклад С це ілюструє.

// Приклад4.c
#define add (x, y) x + y
int main ()

int a;
поплавок b;
a = додати (4,5);
b = додати (2.5,3.6)

У прикладі4.c, ми бачили, що макрос add замінюється на (x, y) x + y . Те саме, що і об’єктоподібний макрос.

3. Макрос для вставки токена:
Мовою C оператор ## використовується для вставки маркера. Використовуючи цей оператор, ми можемо об’єднати два дійсних маркери в один дійсний маркер.
Приклад:

// Приклад5.c
#define MARGE (x, y) x ## y
int main ()

int num = MARGE (52,34);
повернути 0;

Якщо ми намагаємось вставити маркер, який не генерує дійсний маркер, компілятор C видає помилку або попередження.

// Приклад6.c
#define MARGE (x, y) x ## y
int main ()

int num = MARGE (52, +);
повернути 0;

В Приклад6.c, ми маємо повідомлення про помилку, оскільки після поєднання двох токенів ми отримуємо недійсний маркер '52 + '.

4. Макрос для набору символів:
Мовою C оператор # використовується для перетворення параметра макросу в рядкову константу. Коли оператор # передує параметру макросу, параметр перетворюється на строковий літерал. Стрингізацію можна використовувати для об’єктних та функціональних макросів.
Приклад:

// Приклад7.c
#define STRINGIZING (x) #x
int main ()

printf (STRINGIZING (Hello World));
повернути 0;

В Приклад7.c ми отримали рядок “Hello World” з використанням макросу STRINGIZING.

Висновок:

Ця стаття дізналася про всі типи макроподібних Об'єктно-подібні макроси, Функціональні макроси, Макрос для вставки токена, Макрос для розтягування та Макрос для розтягування мовою С. Тепер ми можемо використовувати макрос у нашій програмі на C. без жодних сумнівів.

Mouse left-click button not working on Windows 10
If you are using a dedicated mouse with your laptop, or desktop computer but the mouse left-click button is not working on Windows 10/8/7 for some rea...
Cursor jumps or moves randomly while typing in Windows 10
If you find that your mouse cursor jumps or moves on its own, automatically, randomly while typing in Windows laptop or computer, then some of these s...
How to reverse Mouse and Touchpads scrolling direction in Windows 10
Mouse and Touchpads not only make computing easy but more efficient and less time-consuming. We cannot imagine a life without these devices, but still...