Maison > développement back-end > C++ > La différence entre les macros et les fonctions en C

La différence entre les macros et les fonctions en C

王林
Libérer: 2023-08-30 23:49:06
avant
1063 Les gens l'ont consulté

La différence entre les macros et les fonctions en C

Dans cette section, nous verrons la différence entre les macros et les fonctions en langage C. Les macros sont prétraitées, ce qui signifie que toutes les macros sont prétraitées au moment de la compilation. Les fonctions ne sont pas prétraitées, mais compilées.

Aucune vérification de type n'est effectuée dans les macros, des problèmes avec différents types d'entrées peuvent donc survenir. Avec les fonctions, cela n'arrive pas. De plus, si l'entrée de la macro n'est pas correctement conservée, des résultats non valides peuvent être produits. Veuillez consulter la procédure suivante pour toute question.

Exemple

#include <stdio.h>
#define SQUARE(x) x * x
int sqr(int x) {
   return x*x;
}
main() {
   printf("Use of sqr(). The value of sqr(3+2): %d</p><p>", sqr(3+2));
   printf("Use of SQUARE(). The value of SQUARE(3+2): %d", SQUARE(3+2));
}
Copier après la connexion

Sortie de la fonction

Use of sqr(). The value of sqr(3+2): 25
Use of SQUARE(). The value of SQUARE(3+2): 11
Copier après la connexion

et de la macro, nous voulons que les deux effectuent la même tâche, mais ici nous pouvons voir que les résultats de sortie sont différents. La raison principale est que lorsque nous passons 3 + 2 comme paramètre de fonction, il est converti en 5 puis calcule 5 * 5 = 25. Pour la macro, il exécute 3 + 2 * 3 + 2 = 3 + 6 + 2 = 11.

Par conséquent, les macros ne sont pas recommandées pour les problèmes suivants :

  • Aucune vérification de type

  • Le mode débogage est par défaut car les macros sont simplement des remplacements

  • Les macros n'ont pas d'espace de noms. Ainsi, si une macro est définie dans une section, elle peut être utilisée dans une autre section.

  • La macro augmente la longueur du code car elle est ajoutée avant le prétraitement.

  • Les macros ne vérifient aucune erreur de compilation.

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!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal