Macro dans le langage C

Macro dans le langage C
Une macro dans le langage C est un morceau de code qui a été attribué un nom. Lorsque le nom est utilisé n'importe où dans le programme, la valeur macro est remplacée avant la compilation du programme. Dans cet article, nous verrons en détail comment écrire une macro dans le langage C.

Considérez le code suivant:

COMMENCER
Entier n = 5;
Print ("La valeur de n est% d", n);
FIN

Le code ci-dessus n'est pas un code C valide.

Mais le code suivant est valide:

//Exemple 1.c
#define start int main ()
#define end
#Define Integer int
#define print (a, b) printf (a, b)
COMMENCER
Entier n = 5;
Print ("La valeur de n est% d", n);
FIN

Avant la compilation, le démarrage de la macro, entier, l'impression et la fin ont été remplacés par leur valeur, et le code devient un code C valide. Nous pouvons vérifier en utilisant la commande suivante:

GCC -E Exemple1.c

Cette commande affichera après avoir élargi toutes les macros.

Maintenant, nous verrons différents types de macros:

1. Macros de type objet:

Syntaxe:

#define macro_name macro_value
  • La macro commence toujours par #define
  • macro_name est un nom défini par l'utilisateur de la macro
  • macro_value est la valeur de la macro. C'est peut-être n'importe quoi, mais une ligne et le corps macro se termine avec les extrémités de cette ligne. Il ne nécessite pas de point-virgule (;) à la fin. L'espace est également considéré.

Si la macro prend plus d'une ligne, nous pouvons le faire comme suit:

#define macro_name macro_value1 \
macro_value2 \
macro_value3
#define max 200

Cette macro ressemble à un objet de données qui est pourquoi ce type de macro appelé macro de type objet.

// Exemple2.c
//#inclure
#define max 200
int main()

printf ("La valeur max est:% d", max);
retour 0;

Dans Exapmle2.C, Max est une macro. De la sortie, nous observons que Max est remplacé par sa valeur 200.

2. Macros de type fonction:

Syntaxe:

#define macro_name () macro_value

macro_name est un nom défini par l'utilisateur de la macro. La paire de parenthèses doit mettre après le macro_name. Aucun espace n'est autorisé entre macro_name et parenthèse. Nous pouvons également passer des arguments dans ce type de macros.

#define add (x, y) x + y

Cette macro ressemble à un appel de fonction qui est pourquoi ce type de macro appelé macro de type fonction.

// Exemple3.c
#define add (x, y) x + y
int main()

int a;
Float B;
a = add (4,5);
b = ajouter (2.5,3.6)
retour 0;

Dans l'exemple3.c, Nous avons vu que contrairement à la fonction de C, la macro ne remplace que le code par des arguments sans le calculer. Ainsi, nous pouvons transmettre différents types de données en utilisant la même macro.

Si nous mettons un espace entre le nom de macro et les parenthèses, cela fonctionne de la même manière qu'une macro de type objet. L'exemple ci-dessous C illustre ceci.

// Exemple4.c
#define add (x, y) x + y
int main()

int a;
Float B;
a = add (4,5);
b = ajouter (2.5,3.6)

Dans l'exemple4.C, nous avons vu que l'ajout de macro est remplacé par (x, y) x + y . Identique à une macro de type objet.

3. Macro pour coller de jetons:
En langue C, l'opérateur ## est utilisé pour le collage de jetons. En utilisant cet opérateur, nous pouvons combiner deux jetons valides en un jeton valide.
Exemple:

// Exemple5.c
#define marge (x, y) x ## y
int main()

int num = marge (52,34);
retour 0;

Si nous essayons de coller des jetons qui ne génère pas de jeton valide, le compilateur C donne une erreur ou un avertissement.

// Exemple6.c
#define marge (x, y) x ## y
int main()

int num = marge (52, +);
retour 0;

Dans Exemple6.c, Nous avons un message d'erreur car, après une combinaison de deux jetons, nous obtenons un jeton invalide '52 + '.

4. Macro pour corriger:
Dans le langage C, l'opérateur # est utilisé pour convertir un paramètre macro en constante de chaîne. Lorsqu'un opérateur # précède d'un paramètre macro, le paramètre se convertit en une chaîne littérale. Le stringage peut être utilisé pour les macros de type objet et de fonction.
Exemple:

// Exemple7.c
#define Stringing (x) #x
int main()

printf (Stringing (Hello World));
retour 0;

Dans Exemple7.c Nous avons une chaîne «Hello World» en utilisant la macro de chaîne.

Conclusion:

Cet article a appris tous les types de macro Macros de type objet, Macros de type fonction, Macro pour coller de jetons, Macro pour corriger et macro pour corriger en langue C. Nous pouvons maintenant utiliser une macro dans notre programme C.