Partager via


Recommandations pour choisir entre les fonctions et des macros

La plupart des routines de la bibliothèque Runtime Microsoft sont compilées ou des fonctions assemblys, mais certains routines sont implémentées comme des macros.Lorsqu'un fichier d'en-tête déclare une fonction et une macro version d'une routine, la macro est prioritaire, parce qu'elle apparaît toujours après la déclaration de fonction.Lorsque vous appelez une routine qui est implémentée en tant que fonction et macro, vous pouvez forcer le compilateur à utiliser la version de fonction de deux façons :

  • Mettez le nom actuel entre parenthèses.

    #include <ctype.h>
    a = _toupper(a);    // Use macro version of toupper.
    a = (_toupper)(a);  // Force compiler to use 
                        // function version of toupper.
    
  • « Éliminez » la définition de macro avec la directive d' #undef :

    #include <ctype.h>
    #undef _toupper
    

si vous devez choisir entre une fonction et une macro implémentation d'une routine de bibliothèque, considérez les compromis suivants :

  • Vitesse et la taille le principal avantage d'utiliser des macros est une durée d'exécution plus rapide.Pendant le prétraitement, une macro est (remplacé par sa définition) inline développé chaque fois qu'il est utilisée.Une définition de fonction se produit uniquement une fois quel que soit le nombre de fois qu'elle est appelé.Les macros peuvent augmenter le nombre d'instructions mais n'ont pas la surcharge associée à des appels de fonction.

  • la fonction d'évaluation de fonction A correspond à une adresse ; une macro ne le fait pas.Vous ne pouvez pas utiliser un nom de macro dans les contextes qui nécessitent un pointeur.Par exemple, vous pouvez déclarer un pointeur vers une fonction, mais pas vers une macro.

  • vérification de type lorsque vous déclarez une fonction, le compilateur peut vérifier les types d'argument.Étant donné que vous ne pouvez pas déclarer une macro, le compilateur ne peut pas vérifier de macro types d'argument ; bien qu'il puisse activer le nombre d'arguments que vous passez à une macro.

Voir aussi

Référence

Fonctionnalités de bibliothèque CRT