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

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

王林
王林avant
2023-08-30 23:49:061040parcourir

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

Sortie de la fonction

Use of sqr(). The value of sqr(3+2): 25
Use of SQUARE(). The value of SQUARE(3+2): 11

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!

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