Maison  >  Article  >  développement back-end  >  En langage C, macro santé

En langage C, macro santé

王林
王林avant
2023-09-03 18:09:08633parcourir

En langage C, macro santé

Ici, nous verrons les macros d'hygiène en C. Nous savons utiliser les macros en C. Mais parfois, il ne renvoie pas le résultat attendu en raison d'une capture inattendue de l'identifiant.

Si nous voyons le code ci-dessous, nous pouvons voir qu'il ne fonctionne pas correctement.

Exemple

#include<stdio.h>
#define INCREMENT(i) do { int a = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   INCREMENT(a);
   INCREMENT(b);
   printf("a = %d, b = %d</p><p>", a, b);
}

Après le prétraitement, le code ressemblera à ceci -

Exemple

#include<stdio.h>
#define INCREMENT(i) do { int a = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   do { int a = 0; ++a; } while(0) ;
   do { int a = 0; ++b; } while(0) ;
   printf("a = %d, b = %d</p><p>", a, b);
}

Sortie

a = 10, b = 21

Ici, nous pouvons voir que la valeur de a n'est pas mise à jour. Donc dans ce cas nous utiliserons une macro d’hygiène. L'expansion de ces macros d'hygiène garantit que les identifiants ne sont pas capturés accidentellement. Ici, nous n'utiliserons aucun nom de variable susceptible d'interagir avec le code de l'extension. Ici, une autre variable "t" est utilisée dans la macro. Le programme lui-même ne l'utilise pas.

Exemple

#include<stdio.h>
#define INCREMENT(i) do { int t = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   INCREMENT(a);
   INCREMENT(b);
   printf("a = %d, b = %d</p><p>", a, b);
}

Sortie

a = 11, b = 21

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer