logo

Макроси та їх види в C

В C, a макрос це фрагмент коду в програмі, який замінюється значенням макросу. Макрос визначається #визначити директива. Щоразу, коли компілятор зустрічає ім’я макросу, він замінює це ім’я визначенням макросу. Визначення макросу не повинні закінчуватися крапкою з комою ( ; ).

Приклади макросів у C

Нижче наведено програми для ілюстрації використання макросів у C:



Приклад 1

Наведений нижче приклад демонструє використання макросів для визначення LIMIT.

C








// C program to illustrate macros> #include> // Macro definition> #define LIMIT 5> // Driver Code> int> main()> {> >// Print the value of macro defined> >printf>(>'The value of LIMIT'> >' is %d'>,> >LIMIT);> >return> 0;> }>

>

>

Вихід

The value of LIMIT is 5>

Приклад 2

Наведений нижче приклад демонструє використання макросів для визначення площі прямокутника.

C




// C program to illustrate macros> #include> // Macro definition> #define AREA(l, b) (l * b)> // Driver Code> int> main()> {> >// Given lengths l1 and l2> >int> l1 = 10, l2 = 5, area;> >// Find the area using macros> >area = AREA(l1, l2);> >// Print the area> >printf>(>'Area of rectangle'> >' is: %d'>,> >area);> >return> 0;> }>

>

>

Вихід

Area of rectangle is: 50>

Пояснення
З наведеної вище програми ми бачимо, що коли компілятор знаходить ПЛОЩА (l, b) у програмі він замінює його визначенням макросу, тобто (фунт) . Значення, передані в шаблон макросу ПЛОЩА (l, b) також буде замінено заявою (фунт) . тому ПЛОЩА (10, 5) буде дорівнювати 10*5 .

Типи макросів у C

У мові C є два типи макросів:

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

Об’єктоподібний макрос – це простий ідентифікатор, який буде замінено фрагментом коду. Його називають об’єктоподібним, тому що він виглядає як об’єкт у коді, який його використовує. Він широко використовується для заміни символічного імені числом/змінною, представленою як константа.

приклад

У наведеному нижче прикладі показано простий макрос, тобто об’єктоподібний макрос.

C




// C program to illustrate macros> #include> // Macro definition> #define DATE 31> // Driver Code> int> main()> {> >// Print the message> >printf>(>'Lockdown will be extended'> >' upto %d-MAY-2020'>,> >DATE);> >return> 0;> }>

>

>

Вихід

Lockdown will be extended upto 31-MAY-2020>

2. Ланцюгові макроси

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

приклад

Наведена нижче програма є ілюстрацією ланцюгового макросу

C




// C program to illustrate macros> #include> > // Macro definition> #define INSTAGRAM FOLLOWERS> #define FOLLOWERS 138> > // Driver Code> int> main()> {> >// Print the message> >printf>(>'Geeks for Geeks have %dK'> >' followers on Instagram'>,> >INSTAGRAM);> > >return> 0;> }>

>

>

Вихід

Geeks for Geeks have 138K followers on Instagram>

Пояснення:
INSTAGRAM спочатку розширюється, щоб створити ПІДПИСНИКІВ. Потім розширений макрос розгортається, щоб отримати результат як 138K. Це називається ланцюжком макросів.

3. Багаторядкові макроси

Макрос, подібний до об’єкта, може мати кілька рядків. Отже, щоб створити багаторядковий макрос, ви повинні використовувати зворотну скісну риску-новий рядок.

приклад

Нижче наведено ілюстрації багаторядкових макросів:

C




// C program to illustrate macros> #include> // Multi-line Macro definition> #define ELE 1,> >2,> >3> // Driver Code> int> main()> {> >// Array arr[] with elements> >// defined in macros> >int> arr[] = { ELE };> >// Print elements> >printf>(>'Elements of Array are: '>);> >for> (>int> i = 0; i <3; i++) {> >printf>(>'%d '>, arr[i]);> >}> >return> 0;> }>

>

>

Вихід

Elements of Array are: 1 2 3>

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

Ці макроси є такими ж, як виклик функції. Він замінює весь код замість назви функції. Необхідна пара дужок відразу після назви макросу. Якщо ми ставимо пробіл між назвою макросу та дужками у визначенні макросу, тоді макрос не працюватиме .
Макрос, подібний до функції, подовжується лише тоді, коли його ім’я з’являється з парою круглих дужок після нього. Якщо ми цього не зробимо, покажчик на функцію отримає адресу справжньої функції та призведе до синтаксичної помилки.

приклад

Наведений нижче приклад є ілюстрацією функціональних макросів

C


читати файли json



// C program to illustrate macros> #include> // Function-like Macro definition> #define min(a, b) (((a) <(b)) ? (a) : (b))> // Driver Code> int> main()> {> >// Given two number a and b> >int> a = 18;> >int> b = 76;> >printf>(>'Minimum value between'> >' %d and %d is %d '>,> >a, b, min(a, b));> >return> 0;> }>

>

>

Вихід

Minimum value between 18 and 76 is 18>

Ось один приклад, який допоможе краще зрозуміти макроси:

проблема: Нам потрібно знайти площу кола за визначенням ПЛОЩА (r) Макроси.

C




#include> #define PI 3.1416> #define AREA(r) (PI*(r)*(r))> int> main() {> >float> r = 7;>// radius of circle> > >printf>(>'Area of Circle with radius %.0f: %.3f'>, r, AREA(r));> >return> 0;> }> // This code is contributed by Susobhan Akhuli>

>

>

Вихід

Area of Circle with radius 7: 153.938>

Висновок

Макроси — це невеликі фрагменти коду, які можна виконати за допомогою однієї команди. Їх можна використовувати для автоматизації завдань, спрощення складних процесів і підвищення продуктивності. Однак використання макросів також має деякі недоліки. Ось деякі з переваг і недоліків макросів:

Поширені запитання щодо макросів C

Q1. Які переваги макросів?

відповідь:

    Підвищення продуктивності: макроси можуть заощадити час і зменшити кількість помилок завдяки автоматизації повторюваних завдань. Налаштування: макроси можна налаштувати відповідно до конкретних потреб, що забезпечує більшу гнучкість у виконанні завдань. Узгодженість: макроси можуть допомогти забезпечити узгодженість завдань, дотримуючись набору заздалегідь визначених інструкцій. Ефективність: макроси можуть виконувати завдання швидше, ніж люди, підвищуючи загальну ефективність. Простота використання: макроси легко створювати та використовувати, не вимагаючи практично ніяких знань програмування

Q2. Які недоліки макросів?

відповідь:

    Ризики безпеці. Макроси можуть становити загрозу безпеці, якщо вони не захищені належним чином або використовуються для виконання шкідливого коду. Обмежена функціональність: макроси можуть не виконувати більш складні завдання, що обмежує їх корисність. Проблеми сумісності: макроси можуть бути несумісними з усіма програмними програмами, що обмежує їх корисність. Технічне обслуговування: макроси можуть вимагати обслуговування та оновлень, що може зайняти багато часу та коштувати. Залежність: надмірна залежність від макросів може призвести до зниження навичок вирішення проблем і критичного мислення.

Q3. Чи може макрос приймати аргументи?

відповідь:

Так, макроси можуть приймати аргументи. Наприклад, MAX — це макрос, який приймає два аргументи (a і b) і повертає максимальне значення з двох.

Q4. Чи можуть макроси бути рекурсивними?

відповідь:

Ні, макроси не можуть бути рекурсивними. Якщо макрос стає рекурсивним, тоді визначення посилається на самого себе, і це призведе до нескінченного циклу під час попередньої обробки.