Partager via


intrinsic pragma

Spécifie que les appels aux fonctions spécifiées dans la pragmaliste d’arguments sont intrinsèques.

Syntaxe

#pragma intrinsic( function_1 [, function_2 ... ])

Notes

Indique intrinsicpragma au compilateur qu’une fonction a un comportement connu. Le compilateur peut appeler cette fonction sans remplacer l'appel de fonction par des instructions inline, si cela entraîne de meilleures performances.

Les fonctions de bibliothèque avec des formes intrinsèques sont répertoriées ci-dessous. Une fois qu’une intrinsicpragma fonction est vue, elle prend effet à la première définition de fonction contenant une fonction intrinsèque spécifiée. L’effet continue à la fin du fichier source ou à l’apparence d’une functionpragma fonction intrinsèque spécifiant la même fonction intrinsèque. Il intrinsicpragma ne peut être utilisé qu’en dehors d’une définition de fonction, au niveau global.

Les fonctions suivantes ont des formes intrinsèques et les formulaires intrinsèques sont utilisés lorsque vous spécifiez /Oi:

Les programmes qui utilisent des fonctions intrinsèques sont plus rapides, car ils n’ont pas la surcharge des appels de fonction. Toutefois, elles peuvent être plus volumineuses en raison du code supplémentaire généré.

Exemple spécifique à x86

Les _disable intrinsèques et _enable les instructions génèrent des instructions en mode noyau pour désactiver ou activer des interruptions, et peuvent être utiles dans les pilotes en mode noyau.

Compilez le code suivant à partir de la ligne de commande et cl -c -FAs sample.c examinez-les sample.asm pour voir qu’ils se transforment en instructions x86 CLI et STI :

// pragma_directive_intrinsic.cpp
// processor: x86
#include <dos.h>   // definitions for _disable, _enable
#pragma intrinsic(_disable)
#pragma intrinsic(_enable)
void f1(void) {
   _disable();
   // do some work here that should not be interrupted
   _enable();
}
int main() {
}

Fonctions à virgule flottante intrinsèques

Ces fonctions à virgule flottante n’ont pas de véritables formes intrinsèques. Au lieu de cela, ils ont des versions qui passent directement des arguments à la puce à virgule flottante, plutôt que de les pousser sur la pile :

Ces fonctions à virgule flottante ont de véritables formes intrinsèques lorsque vous spécifiez /Oi et /fp:fast (ou toute option incluant /Oi: /Ox, /O1et /O2) :

Vous pouvez utiliser /fp:strict ou /Za remplacer la génération de véritables options à virgule flottante intrinsèque. Dans ce cas, les fonctions sont générées en tant que routines de bibliothèque qui passent directement des arguments au processeur de calcul en virgule flottante au lieu de leur appliquer une transmission de type push sur la pile du programme.

Pour #pragma function plus d’informations, consultez un exemple sur l’activation et la désactivation des intrinsèques pour un bloc de texte source.

Voir aussi

Pragma directives et mots __pragma _Pragma clés
Intrinsèques du compilateur