Partager via


intrinsic

Spécifie que les appels aux fonctions spécifiées dans la liste d'arguments du pragma sont intrinsèques.

#pragma intrinsic( function1 [, function2, ...] )

Notes

Le pragma intrinsic indique 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. Lorsqu'un pragma intrinsic est vu, il prend effet à la première définition de fonction contenant une fonction intrinsèque spécifiée. L'effet se poursuit jusqu'à la fin du fichier source ou la détection d'un pragma function spécifiant la même fonction intrinsèque. Le pragma intrinsic peut être utilisé uniquement en dehors d'une définition de fonction, au niveau global.

Les fonctions suivantes ont des formes intrinsèques, qui sont utilisées lorsque vous spécifiez /Oi :

_disable

_outp

fabs

strcmp

_enable

_outpw

labs

strcpy

_inp

_rotl

memcmp

strlen

_inpw

_rotr

memcpy

 

_lrotl

_strset

memset

 

_lrotr

abs

strcat

 

Les programmes qui utilisent des fonctions intrinsèques sont plus rapides, car ils n'ont pas la charge liée à l'appel des fonctions, mais ils peuvent être plus volumineux en raison du code supplémentaire généré.

Section spécifique à x86

Les éléments intrinsèques _disable et _enable génèrent des instructions en mode noyau afin de désactiver/activer des interruptions, et ils peuvent s'avérer utiles dans les pilotes en mode noyau.

Exemple

Compilez le code ci-dessous à partir de la ligne de commande avec "cl -c -FAs sample.c" et examinez sample.asm pour vérifier que le code se transforme 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() {
}

Fin de la section spécifique à x86

Les fonctions à virgule flottante répertoriées ci-dessous n'ont pas de véritables formes intrinsèques. À la place, elles ont des versions qui passent directement des arguments au processeur à virgule flottante au lieu de leur appliquer une transmission de type push sur la pile du programme :

acos

cosh

pow

tanh

asin

fmod

sinh

 

Les fonctions à virgule flottante répertoriées ci-dessous ont de véritables formes intrinsèques lorsque vous spécifiez /Oi, /Og et /fp:fast (ou toute option qui inclut /Og : /Ox, /O1 et /O2) :

atan

exp

log10

sqrt

atan2

log

sin

tan

cos

 

 

 

Vous pouvez utiliser /fp:strict ou /Za pour remplacer la génération de véritables options à virgule flottante intrinsèques. 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.

Consultez #pragma function pour bénéficier d'informations supplémentaires et d'un exemple sur la façon d'activer/désactiver des éléments intrinsèques pour un bloc de texte source.

Voir aussi

Référence

Directives pragma et mot clé _Pragma

intrinsèques du compilateur