Quelle est la différence entre une macro et une fonction en C?

Quelle est la différence entre une macro et une fonction en C ? S’il vous plaît dites-moi une application où je peux utiliser des macros et des fonctions?

Avantages et inconvénients des macros

Les avantages

  • L’efficacité du temps.
  • Pas besoin de passer des arguments comme fonction.
  • C’est prétraité.
  • Plus facile à lire.

Désavantages

  • Très difficile à déboguer en gros code.
  • Prenez plus de mémoire dans la stack pour la comparer à la fonction. Supposons dans le programme qu’il existe une macro qui a utilisé 50 fois cela signifie qu’elle consumra 50 fois la mémoire, mais que si une fonction est appelée 50 fois, une seule mémoire sera utilisée à chaque fois, car chaque fois qu’il désallouera cette mémoire.

La différence fondamentale est que la fonction est compilée et que la macro est prétraitée. Lorsque vous utilisez un appel de fonction, il sera traduit en ASM CALL avec toutes ces opérations de stack pour transmettre des parameters et des valeurs. Lorsque vous utilisez un MACRO, le préprocesseur C traduira toutes les chaînes à l’aide de macros et de les comstackr.

Moins d’utiliser des macros, c’est qu’ils cachent l’implémentation. Son chemin est plus difficile à trouver si on en a un.

En C (et C ++), une macro est une directive de préprocesseur. Cela signifie qu’avant que votre programme ne commence à comstackr, toutes les macros seront traitées. Les macros sont utiles car

  • Ils peuvent rendre votre programme plus facile à lire
  • Ils peuvent améliorer l’efficacité (car ils peuvent être calculés au moment de la compilation)
  • Ils peuvent raccourcir les expressions longues ou compliquées qui sont souvent utilisées. Par exemple, nous utilisons une macro pour obtenir le journal actuel log4cpp et quelques-uns pour y écrire avec différents niveaux.

Disdvatages

  • Augmentez la taille de votre exécutable
  • Peut inonder votre espace de nom si pas prudent. Par exemple, si vous avez trop de macros de préprocesseur, vous pouvez accidentellement utiliser leurs noms dans votre code, ce qui peut être très déroutant pour le débogage.

Exemple

#define INCREMENT(x) x++ 

Une fonction est un morceau de code qui peut être exécuté de manière relativement indépendante et effectue une tâche spécifique. Vous pouvez y voir une sorte de fonction mathématique: une fonction à partir d’un ensemble d’entrées donnera une sortie particulière. En C, ceux-ci sont définis comme

  () { //code body } 

Et une autre différence est que dans la fonction il y a une surcharge de la stack, mais dans le cas de macros il n’y a pas de surcharge de la stack; c’est juste l’expansion du code.

Vous devez penser la macro comme un remplacement de texte: c’est comme si vous insériez le code de la macro à chaque fois que vous la voyez dans votre code. C’est bon pour les “extraits de code”, car vous évitez la surcharge d’appels de la fonction, car chaque fois que vous appelez une fonction, vous déployez des efforts pour placer des parameters dans la stack.

Une fonction est une opération de valeurs en valeurs , c’est-à-dire le type de données que vous pensez normalement d’un programme manipulant (nombres, chaînes, etc.).

Une macro est une opération de code à code . Il prend une partie d’un programme et l’utilise pour générer une partie différente pour le programme.

Il n’y a aucun chevauchement entre les fonctions et les macros en C; ils ne font pas la même chose. (Vous ne pouvez pas écrire une fonction d’une valeur à un code; vous ne pouvez pas, malgré les apparences, écrire une macro d’un code à une valeur. Je sais qu’il semble que vous puissiez le faire, mais il est important de comprendre que ce n’est pas ce que vous êtes réellement. Faire.)

Une macro peut ressembler à une fonction, car vous pouvez écrire une macro conçue pour gérer un morceau de code qui génère ou représente lui-même une valeur, mais cette macro ne fonctionne toujours pas sur la valeur elle-même: elle prend la valeur- générer du code (qui peut être un simple nombre) et l’intégrer à un code consommateur de valeur (qui ressemble au “corps” de la macro). Cela signifie que l’utilisation de macros telles que des fonctions est extrêmement déroutante et n’est pas ce pour quoi elles sont utilisées. Les fonctions au contraire sont en réalité un seul bloc de code discret.

Le fait que les fonctions s’exécutent généralement à l’exécution et que les macros (en C) s’exécutent toujours à la compilation est simplement une limitation imposée par le fait que les valeurs sont généralement dynamics et que le code n’est généralement pas disponible à l’exécution, respectivement. Ce n’est pas réellement un aspect fondamental des fonctions ni des macros (les fonctions peuvent être en ligne et optimisées; les macros peuvent être appliquées au code généré dynamicment), et c’est un peu un fil rouge.

L’avantage de MACRO est que nous ne le définissons qu’une seule fois. Si nous voulons modifier la valeur, nous pouvons le faire à un seul endroit et la valeur est reflétée dans l’ensemble du programme.