web-dev-qa-db-fra.com

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

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

18
user615929

Avantages et inconvénients des macros

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 pile pour la comparer à la fonction. Supposons dans le programme qu'il existe une macro qui a utilisé 50 fois cela signifie qu'elle consommera 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'elle sera désallouée
22
Varun Chhangani

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 pile pour transmettre des paramètres et des valeurs. Lorsque vous utilisez un MACRO, le préprocesseur C traduira toutes les chaînes à l’aide de macros et de les compiler.

Moins d'utiliser des macros, c'est qu'ils cachent la mise en œuvre. Il est plus difficile de trouver un bug si vous en avez un.

19
Alexander Sobolev

En C (et C++), une macro est une directive de préprocesseur. Cela signifie qu'avant que votre programme ne commence à compiler, 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 à différents niveaux.

Disdvatages

  • Augmentez la taille de votre exécutable
  • Peut inonder votre espace de noms 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

<return type> <name>(<parameters>)
{
  //code body
}
11
Jim Jeffries

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

1
Ariful Hoque

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. Cela est utile pour les "extraits de code", car vous évitez la surcharge d'appel de la fonction, car chaque fois que vous appelez une fonction, vous déployez des efforts pour placer des paramètres dans la pile.

0
Felice Pollano