logo

Makra i ich typy w C

W C, A makro to fragment kodu w programie zastępowany wartością makra. Makro jest zdefiniowane przez #definiować dyrektywa. Ilekroć kompilator napotyka nazwę makra, zastępuje ją definicją makra. Definicje makr nie muszą być zakończone średnikiem ( ; ).

Przykłady makr w C

Poniżej znajdują się programy ilustrujące użycie makr w języku C:



Przykład 1

Poniższy przykład ilustruje użycie makr do zdefiniowania 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;> }>

>

>

Wyjście

The value of LIMIT is 5>

Przykład 2

Poniższy przykład ilustruje użycie makr do obliczenia pola prostokąta.

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;> }>

>

>

Wyjście

Area of rectangle is: 50>

Wyjaśnienie
Z powyższego programu możemy to zobaczyć za każdym razem, gdy kompilator znajdzie POWIERZCHNIA(l, b) w programie zastępuje to definicją makra tj. (funt) . Wartości przekazane do szablonu makra POWIERZCHNIA(l, b) zostanie również zastąpione oświadczeniem (funt) . Dlatego, POWIERZCHNIA(10, 5) będzie równe 10*5 .

Rodzaje makr w C

W języku C istnieją dwa typy makr:

1. Makra obiektowe

Makro obiektowe to prosty identyfikator, który zostanie zastąpiony fragmentem kodu. Nazywa się to obiektowym, ponieważ wygląda jak obiekt w kodzie, który go używa. Jest powszechnie używany do zastąpienia nazwy symbolicznej liczbą/zmienną reprezentowaną jako stała.

Przykład

Poniższy przykład jest ilustracją prostego makra, czyli makra obiektowego.

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;> }>

>

>

Wyjście

Lockdown will be extended upto 31-MAY-2020>

2. Makra łańcuchowe

Makra wewnątrz makr nazywane są makrami łańcuchowymi. W makrach łańcuchowych rozwijane jest najpierw makro nadrzędne, a następnie makro podrzędne.

Przykład

Poniższy program jest ilustracją Makra Łańcuchowego

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;> }>

>

>

Wyjście

Geeks for Geeks have 138K followers on Instagram>

Wyjaśnienie:
INSTAGRAM jest rozwijany w pierwszej kolejności, aby produkować OBSERWATORÓW. Następnie rozwinięte makro jest rozwijane, aby uzyskać wynik 138K. Nazywa się to łączeniem makr.

3. Makra wieloliniowe

Makro obiektowe może mieć wiele linii. Aby więc utworzyć makro wieloliniowe, musisz użyć ukośnika odwrotnego-nowej linii.

Przykład

Poniżej znajduje się ilustracja makr wieloliniowych:

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;> }>

>

>

Wyjście

Elements of Array are: 1 2 3>

4. Makra funkcyjne

Te makra są takie same jak wywołanie funkcji. Zastępuje cały kod zamiast nazwy funkcji. Niezbędna jest para nawiasów bezpośrednio po nazwie makra. Jeśli wstawimy spację pomiędzy nazwą makra a nawiasami w definicji makra, wtedy makro nie zadziała .
Makro funkcyjne jest wydłużane tylko wtedy i tylko wtedy, gdy po jego nazwie pojawiają się nawiasy. Jeśli tego nie zrobimy, wskaźnik funkcji otrzyma adres rzeczywistej funkcji i doprowadzi do błędu składniowego.

Przykład

Poniższy przykład ilustruje makra funkcyjne

C


jak przekonwertować ciąg na liczbę całkowitą



// 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;> }>

>

>

Wyjście

Minimum value between 18 and 76 is 18>

Oto jeden przykład, który pozwoli lepiej zrozumieć makra:

Problem: Musimy znaleźć pole koła poprzez zdefiniowanie POWIERZCHNIA(r) Makra.

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>

>

>

Wyjście

Area of Circle with radius 7: 153.938>

Wniosek

Makra to małe fragmenty kodu, które można wykonać za pomocą jednego polecenia. Można ich używać do automatyzacji zadań, upraszczania złożonych procesów i zwiększania produktywności. Korzystanie z makr ma jednak również pewne wady. Oto niektóre zalety i wady makr:

Często zadawane pytania dotyczące makr C

Pytanie 1. Jakie są zalety makr?

Odpowiedź:

    Zwiększona produktywność: makra mogą zaoszczędzić czas i zmniejszyć liczbę błędów poprzez automatyzację powtarzalnych zadań. Dostosowywanie: makra można dostosować do konkretnych potrzeb, co pozwala na większą elastyczność w sposobie wykonywania zadań. Spójność: makra mogą pomóc w zapewnieniu spójności zadań, wykonując zestaw z góry określonych instrukcji. Wydajność: Makra mogą wykonywać zadania szybciej niż ludzie, poprawiając ogólną wydajność. Łatwość użycia: makra są łatwe w tworzeniu i obsłudze i nie wymagają żadnej wiedzy programistycznej

Pytanie 2. Jakie są wady makr?

Odpowiedź:

    Zagrożenia bezpieczeństwa: Makra mogą stanowić zagrożenie bezpieczeństwa, jeśli nie są odpowiednio zabezpieczone lub jeśli zostaną użyte do wykonania złośliwego kodu. Ograniczona funkcjonalność: Makra mogą nie być w stanie wykonywać bardziej złożonych zadań, co ogranicza ich użyteczność. Problemy ze zgodnością: Makra mogą nie być kompatybilne ze wszystkimi aplikacjami, co ogranicza ich użyteczność. Konserwacja: Makra mogą wymagać konserwacji i aktualizacji, co może być czasochłonne i kosztowne. Uzależnienie: Nadmierne poleganie na makrach może skutkować zmniejszeniem umiejętności rozwiązywania problemów i krytycznego myślenia.

Pytanie 3. Czy makro może przyjmować argumenty?

Odpowiedź:

Tak, makra mogą przyjmować argumenty. Na przykład MAX to makro, które pobiera dwa argumenty (aib) i zwraca maksimum z nich.

Pytanie 4. Czy makra mogą być rekurencyjne?

Odpowiedź:

Nie, makra nie mogą być rekurencyjne. Jeśli makro stanie się rekurencyjne, wówczas definicja odnosi się do siebie, co doprowadzi do nieskończonej pętli podczas przetwarzania wstępnego.