*   >> Lecture Éducation Articles >> science >> la programmation

Introduction aux macros dans C

Presque tout le monde déjà défini une constante en C en utilisant #define CONST 12345

mais seulement un petit groupe sait vraiment ce que cette ligne fait et comment explorer ces fonctionnalités. Chaque ligne qui commence par un # est pas traitée par le compilateur C, mais par le processeur de pré C qui analyse ces lignes et produit le code qui sera effectivement compilé. Dans gcc, vous pouvez voir le résultat de l'étape de prétraitement utilisant gcc -E src.

cWhat la directive Définir Comment fonctionne est de faire le préprocesseur remplacer chaque occurrence de la définition par le texte qui suit. Le remplacement est purement textuelle et il ya quelques trucs qui sont vraiment génial. Je vais parler de deux d'entre eux: les macros de type fonction et multi-lignes macrosTo macros.Function comme faire une macro de fonction comme vient de mettre la parenthèse d'habitude après le nom de la macro et suivre le nom de ses arguments. Les arguments seront remplacés par la chaîne exacte que vous passez à la macro.

Un exemple rapide #define print_int (x) printf ("Int% d \\ n", x); Lorsqu'il est appelé print_int (30), la macro va étendre toprintf ("Int% d \\ n", 30); multiligne macrosA multiligne macro peut être construit mettre un \\ à la fin de toute la ligne de la macro. Ceci indique que le caractère macro continue sur la ligne suivante. #define SWAP (a, b) {\\ ^ a = b; \\ B ^ = a; \\ A ^ = b; \\} La parenthèse est nécessaire parce que ce bloc doit être évaluée comme une seule instruction.

Sans elle, le suivant échouerait:

Si (a> b) SWAP (a, b) Les macros sont dangerousMacros produit des erreurs qui sont difficiles à déboguer et difficile à patch. Les pièges possibles sont nombreuses (erreurs dans la priorité des opérateurs, des macros auto-référencement, etc.). Cette page a tous vraiment bien documenté. Ce fut une petite introduction à une utilisation plus avancée des macros C. Le préprocesseur est une fonctionnalité puissante et peut être utilisé pour faire beaucoup de bonnes choses. Pour en savoir plus à ce sujet, on peut visiter ce site.



Copyright © 2008 - 2016 Lecture Éducation Articles,https://lecture.nmjjxx.com All rights reserved.