logo

Macros et ses types en C

En C, un macro est un morceau de code dans un programme qui est remplacé par la valeur de la macro. La macro est définie par #définir directif. Chaque fois qu'un nom de macro est rencontré par le compilateur, il remplace le nom par la définition de la macro. Les définitions de macro ne doivent pas nécessairement être terminées par un point-virgule ( ; ).

Exemples de macros en C

Vous trouverez ci-dessous les programmes pour illustrer l'utilisation des macros en C :



Exemple 1

L'exemple ci-dessous montre l'utilisation de macros pour définir 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;> }>

>

>

Sortir

The value of LIMIT is 5>

Exemple 2

L'exemple ci-dessous montre l'utilisation de macros pour trouver l'aire d'un rectangle.

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

>

>

Sortir

Area of rectangle is: 50>

Explication
À partir du programme ci-dessus, nous pouvons voir que chaque fois que le compilateur trouve ZONE(l,b) dans le programme, il le remplace par la définition des macros, c'est-à-dire (kg) . Les valeurs transmises au modèle de macro ZONE(l,b) sera également remplacé par la déclaration (kg) . Donc, ZONE(10, 5) sera égal à 10*5 .

Types de macros en C

Il existe deux types de macros en langage C :

1. Macros de type objet

Une macro de type objet est un simple identifiant qui sera remplacé par un fragment de code. On l'appelle objet car il ressemble à un objet dans le code qui l'utilise. Il est couramment utilisé pour remplacer un nom symbolique par une variable numérique représentée comme une constante.

Exemple

L'exemple ci-dessous est l'illustration d'une macro simple, c'est-à-dire des macros de type objet.

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

>

>

Sortir

Lockdown will be extended upto 31-MAY-2020>

2. Macros de chaîne

Les macros à l’intérieur des macros sont appelées macros de chaîne. Dans les macros en chaîne, la macro parent est d'abord développée, puis la macro enfant est développée.

Exemple

Le programme ci-dessous est l'illustration d'une macro de chaîne

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

>

>

Sortir

Geeks for Geeks have 138K followers on Instagram>

Explication:
INSTAGRAM est d'abord étendu pour produire des FOLLOWERS. Ensuite, la macro développée est développée pour produire le résultat 138K. C'est ce qu'on appelle l'enchaînement de macros.

3. Macros multilignes

Une macro de type objet peut avoir plusieurs lignes. Donc, pour créer une macro multiligne, vous devez utiliser une barre oblique inverse-nouvelle ligne.

Exemple

Ci-dessous l'illustration des macros multilignes :

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

>

>

Sortir

Elements of Array are: 1 2 3>

4. Macros de type fonction

Ces macros sont identiques à un appel de fonction. Il remplace le code entier au lieu d'un nom de fonction. Une paire de parenthèses immédiatement après le nom de la macro est nécessaire. Si on met un espace entre le nom de la macro et les parenthèses dans la définition de la macro, alors la macro ne fonctionnera pas .
Une macro de type fonction n'est allongée que si et seulement si son nom apparaît suivi de deux parenthèses. Si nous ne le faisons pas, le pointeur de fonction obtiendra l'adresse de la fonction réelle et entraînera une erreur de syntaxe.

Exemple

L'exemple ci-dessous est l'illustration de macros de type fonction

C


échange de mémoire



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

>

>

Sortir

Minimum value between 18 and 76 is 18>

Voici un exemple qui permettra de mieux comprendre les macros :

Problème: Nous devons trouver l'aire d'un cercle en définissant ZONE(r) Macros.

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>

>

>

Sortir

Area of Circle with radius 7: 153.938>

Conclusion

Les macros sont de petits morceaux de code qui peuvent être exécutés avec une seule commande. Ils peuvent être utilisés pour automatiser des tâches, simplifier des processus complexes et améliorer la productivité. Cependant, l’utilisation de macros présente également certains inconvénients. Voici quelques-uns des avantages et inconvénients des macros :

FAQ sur les macros C

T1. Quels sont les avantages des macros ?

Répondre:

    Productivité accrue : les macros peuvent gagner du temps et réduire les erreurs en automatisant les tâches répétitives. Personnalisation : les macros peuvent être personnalisées pour répondre à des besoins spécifiques, permettant une plus grande flexibilité dans la manière dont les tâches sont effectuées. Cohérence : les macros peuvent aider à garantir la cohérence des tâches en suivant un ensemble d'instructions prédéterminées. Efficacité : les macros peuvent effectuer des tâches plus rapidement que les humains, améliorant ainsi l’efficacité globale. Facilité d'utilisation : les macros sont faciles à créer et à utiliser, nécessitant peu ou pas de connaissances en programmation.

Q2. Quels sont les inconvénients des macros ?

Répondre:

    Risques de sécurité : les macros peuvent constituer un risque de sécurité si elles ne sont pas correctement sécurisées ou si elles sont utilisées pour exécuter du code malveillant. Fonctionnalité limitée : les macros peuvent ne pas être en mesure d'effectuer des tâches plus complexes, ce qui limite leur utilité. Problèmes de compatibilité : les macros peuvent ne pas être compatibles avec toutes les applications logicielles, ce qui limite leur utilité. Maintenance : les macros peuvent nécessiter une maintenance et des mises à jour, ce qui peut prendre du temps et être coûteux. Dépendance : une dépendance excessive à l’égard des macros peut entraîner une diminution des compétences en résolution de problèmes et de la pensée critique.

Q3. Une macro peut-elle prendre des arguments ?

Répondre:

Oui, les macros peuvent prendre des arguments. Par exemple, MAX est une macro qui prend deux arguments (a et b) et renvoie le maximum des deux.

Q4. Les macros peuvent-elles être récursives ?

Répondre:

Non, les macros ne peuvent pas être récursives. Si une macro devient récursive, alors la définition se réfère à elle-même et entraînera une boucle infinie lors du prétraitement.