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?
Les avantages
Désavantages
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
Disdvatages
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.