Partager via


Fonctions inline et des macros

Bien que les fonctions inline soient similaires aux macros (car le code de la fonction est développé au point de l'appel au moment de la compilation), les fonctions inline sont analysées par le compilateur, alors que les macros sont développées par le préprocesseur.Par conséquent, il existe plusieurs différences importantes :

  • Les fonctions inline suivent tous les fournisseurs de sécurité de type appliqués sur les fonctions normales.

  • Les fonctions inline sont spécifiées en utilisant la même syntaxe que toute autre fonction mais elles incluent le mot clé d' inline dans la déclaration de fonction.

  • Les expressions passées comme arguments aux fonctions inline sont évaluées une fois.Dans certains cas, les expressions passées comme arguments aux macros peuvent être évaluées plusieurs fois.

Exemple

L'exemple suivant montre un qui convertit les minuscules en majuscules :

// inline_functions_macro.c
#include <stdio.h>
#include <conio.h>

#define toupper(a) ((a) >= 'a' && ((a) <= 'z') ? ((a)-('a'-'A')):(a))

int main() {
   char ch;
   printf_s("Enter a character: ");
   ch = toupper( getc(stdin) );
   printf_s( "%c", ch );
}
  
  

L'objectif de l'expression toupper(getc(stdin)) est qu'un caractère doit être lu du périphérique de console (stdin) et, si nécessaire, être convertis en majuscules.

Du fait de l'implémentation de la macro, getc est exécuté une fois pour déterminer si le caractère est supérieur ou égal à « a », et pour déterminer une fois s'il est inférieur ou égal à « Z ». S'il figure dans cette plage, getc est à nouveau exécuté pour convertir le caractère en majuscules.Cela signifie que les attentes de programme deux ou trois caractères lors, idéalement, il doit attendre qu'un.

Les fonctions inline remédient à du problème décrites précédemment :

// inline_functions_inline.cpp
#include <stdio.h>
#include <conio.h>

inline char toupper( char a ) {
   return ((a >= 'a' && a <= 'z') ? a-('a'-'A') : a );
}

int main() {
   printf_s("Enter a character: ");
   char ch = toupper( getc(stdin) );
   printf_s( "%c", ch );
}
  
  

Voir aussi

Référence

inline, __inline, __forceinline