Recommandé, 2024

Choix De L'Éditeur

Différence entre Inline et Macro en C ++

Macro est une instruction qui s’agrandit au moment de son invocation. Les fonctions peuvent également être définies, comme les macros. De même, les fonctions en ligne se développent également au moment de son invocation. Une différence principale entre les fonctions inline et macro réside dans le fait que les fonctions inline sont développées lors de la compilation et que les macros sont développées lors du traitement du programme par le préprocesseur .

Etudions la différence entre inline et macro à l'aide du tableau de comparaison.

Tableau de comparaison

Base de comparaisonEn ligneMacro
De baseLes fonctions en ligne sont analysées par le compilateur.Les macros sont développées par le préprocesseur.
Syntaxetype de retour en ligne funct_name (paramètres) {. . . }#define macro_name char_sequence
Mots-clés utilisésen ligne
#définir
DéfiniIl peut être défini à l'intérieur ou à l'extérieur de la classe.Il est toujours défini au début du programme.
ÉvaluationIl n'évalue l'argument qu'une seule fois.Il évalue l'argument chaque fois qu'il est utilisé dans le code.
ExpansionLe compilateur ne peut pas en ligne et développer toutes les fonctions.Les macros sont toujours développées.
AutomatisationLes fonctions courtes, définies à l'intérieur de la classe, sont automatiquement transformées en fonctions inline.Les macros doivent être définies spécifiquement.
Accéder àUne fonction membre en ligne peut accéder aux données membres de la classe.Les macros ne peuvent jamais être les membres de la classe et ne peuvent pas accéder aux données membres de la classe.
RésiliationLa définition de la fonction inline se termine par les accolades situées à la fin de la fonction inline.La définition de macro se termine par la nouvelle ligne.
DébogageLe débogage est facile pour une fonction en ligne car la vérification des erreurs est effectuée lors de la compilation.Le débogage devient difficile pour les macros car la vérification des erreurs ne se produit pas lors de la compilation.
ContraignantUne fonction en ligne lie très bien toutes les instructions dans le corps de la fonction car le corps de la fonction commence et se termine par les accolades.Une macro est confrontée au problème de la liaison si elle comporte plusieurs instructions, car elle ne comporte aucun symbole de terminaison.

Définition de Inline

Une fonction en ligne ressemble à une fonction normale, mais est précédée du mot clé " inline ". Les fonctions en ligne sont des fonctions de longueur courte qui sont développées au moment de son appel, au lieu d'être appelées. Comprenons les fonctions inline avec un exemple.

 #include using namespace std; exemple de classe {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" < 

Dans le programme ci-dessus, j'ai déclaré et défini la fonction initialization (), en tant que fonction inline de la classe «exemple». Le code de la fonction initialization () se développera là où il est appelé par l'objet de la classe «exemple». La fonction display (), définie dans l'exemple de classe, n'est pas déclarée inline mais elle peut être considérée inline par le compilateur, comme en C ++, la fonction définie dans la classe est automatiquement intégrée au compilateur en tenant compte de la longueur de la fonction.

  • La fonction en ligne réduit les frais généraux liés aux appels et retours de fonction, ce qui réduit le temps d'exécution du programme. De plus, les arguments sont placés dans la pile et les registres sont sauvegardés lorsqu'une fonction est appelée et réinitialisés lorsque la fonction retourne, ce qui prend du temps. Ceci est évité par les fonctions en ligne car il n'est pas nécessaire de créer des variables locales et des paramètres formels .
  • Les fonctions en ligne peuvent être un membre de la classe et peuvent également accéder au membre de données de la classe.
  • La fonction inline réduit le temps d'exécution du programme mais, parfois, si la longueur de la fonction inline est supérieure, la taille du programme augmente également en raison du code dupliqué. Par conséquent, il est recommandé d’inscrire des fonctions très petites en ligne.
  • L'argument de la fonction inline n'est évalué qu'une fois.

Définition de macro

Macro est une «directive préprocesseurs». Avant la compilation, le programme est examiné par le préprocesseur et, s’il trouve la macro dans le programme, il remplace cette macro par sa définition. Par conséquent, la macro est considérée comme le «remplacement de texte». Laissez-nous étudier la macro avec un exemple.

 #include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Le plus grand des 10 et 20 est" << GREATER ("20", "10") << "\ n"; retourne 0; } 

Dans le code ci-dessus, j'ai déclaré une fonction macro GREATER (), qui compare et trouve le plus grand nombre des deux paramètres. Vous pouvez constater qu'il n'y a pas de point-virgule pour terminer la macro car celle-ci n'est terminée que par la nouvelle ligne. Comme une macro est juste un remplacement de texte, elle développera le code de la macro où elle est invoquée.

  • Les macros sont toujours définies en lettres majuscules afin que les programmeurs puissent facilement identifier toutes les macros du programme en cours de lecture.
  • La macro ne peut jamais être une fonction membre d'une classe, ni accéder aux données membres d'une classe.
  • La fonction macro évalue l'argument chaque fois qu'il apparaît dans sa définition, ce qui entraîne un résultat inattendu.
  • Macro doit être d'une taille plus petite car les macros plus grandes augmenteront inutilement la taille du code.

Différences clés entre Inline et Macro

  1. La différence fondamentale entre inline et macro réside dans le fait que les fonctions inline sont analysées par le compilateur, tandis que les macros d'un programme sont développées par le préprocesseur.
  2. Le mot clé utilisé pour définir une fonction en ligne est « inline », tandis que le mot clé utilisé pour définir une macro est « #define ».
  3. Une fois que la fonction inline est décalée dans une classe, elle peut être définie à l'intérieur ou à l'extérieur d'une classe. Par contre, une macro est toujours définie au début du programme.
  4. Les arguments passés aux fonctions inline ne sont évalués qu'une seule fois lors de la compilation, tandis que les arguments des macros sont évalués chaque fois qu'une macro est utilisée dans le code.
  5. Le compilateur ne peut pas intégrer et développer toutes les fonctions définies dans une classe. D'autre part, les macros sont toujours développées.
  6. Les fonctions courtes définies dans une classe sans mot-clé inline sont automatiquement créées. D'autre part, Macro devrait être défini spécifiquement.
  7. Une fonction inline peut accéder aux membres de la classe alors qu'une macro ne peut jamais accéder aux membres de la classe.
  8. Pour terminer une fonction en ligne, une accolade fermée est requise, tandis qu'une macro est terminée par le début d'une nouvelle ligne.
  9. Le débogage devient facile pour une fonction inlne car il est vérifié lors de la compilation pour toute erreur. D'autre part, une macro n'est pas vérifiée lors de la compilation, le débogage d'une macro devient difficile.
  10. En tant que fonction, une fonction en ligne lie ses membres entre des accolades de départ et fermées. En revanche, les macros n’ayant pas de symbole de terminaison, la liaison devient difficile lorsque les macros contiennent plus d’une déclaration.

Conclusions:

Les fonctions en ligne sont beaucoup plus convaincantes que la fonction macro. C ++ fournit également un meilleur moyen de définir une constante, qui utilise un mot clé «const».

Top