2010-09-16 5 views
2

Possible en double:
Inline functions vs Preprocessor macrosfonctions inline

bonjour quelqu'un peut s'il vous plaît expliquer ce que cela signifie exactement et quelle est la différence de macro régulière (je sais que cela fonctionne au cours de la compilation temps et non préprocesseur mais alors quoi?) merci d'avance pour toute aide, regardé dans google, mais n'a pas trouvé quelque chose de compréhensible

+0

De quelle langue parlez-vous? VBA? – Eric

Répondre

1

(En supposant ici que vous parlez à propos de C/C++.)

Une fonction inline a son code copié dans les points où il s'appelle, tout comme une macro le ferait. La principale raison pour laquelle vous utiliseriez des fonctions en ligne plutôt que des macros pour accomplir ceci est que le langage macro est beaucoup plus faible que le code C/C++ actuel; Il est plus difficile d'écrire des macros compréhensibles, réutilisables et non buggées. Une macro ne crée pas de portée lexicale, de sorte que les variables de l'une peuvent entrer en conflit avec celles qui sont déjà dans la portée où elles sont utilisées. Il ne vérifie pas ses arguments. Il est facile d'introduire des erreurs syntaxiques inattendues, puisque tout ce que fait une macro est essentiellement la recherche et le remplacement.

En outre, IIRC, le compilateur peut choisir d'ignorer une directive inline s'il pense que c'est vraiment boneheaded; ça ne peut pas faire ça avec une macro. Ou, pour reformuler cela d'une manière plus opiniâtre et plus courte: les macros (en C/C++, pas, disons, les dialectes Lisp) sont un horrible kludge, les fonctions inline ne permettent pas de les utiliser. En outre, gardez à l'esprit que ce n'est souvent pas une bonne idée de marquer une fonction comme inline. Les compilateurs seront généralement alignés ou non comme ils l'entendent; En marquant une fonction en ligne, vous assumez la responsabilité d'une fonction de bas niveau, la plupart du temps, le compilateur en sait plus que vous.

1

Il y a une grande différence entre macros et inline functions:

  • Inline est seulement une indication pour le compilateur cette fonction peut être mise en ligne. Il ne garantit pas qu'il le sera.
  • Le compilateur peut intégrer des fonctions non marquées avec des lignes.
  • L'invocation de macro n'effectue pas la vérification de type , les macros ne sont donc pas de type .
  • L'utilisation de la fonction au lieu d'une macro est plus susceptible de vous donner une bonne et sortie de compilateur compréhensible dans cas il ya une erreur.
  • Il est plus facile de déboguer des fonctions, utilisant des macros complique le débogage d'un lot . La plupart des compilateurs vous donneront une option d'activer ou de désactiver en ligne, ceci n'est pas possible avec les macros .

La règle générale en C++ est que les macros doivent être évitées autant que possible.