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 d' intrinsèque indique au compilateur qu'une fonction a un comportement connu.Le compilateur peut appeler la fonction et ne pas remplacer l'appel de fonction avec l'instruction intégrée, si cela provoquera des performances.

Les fonctions de bibliothèque avec les formes intrinsèques sont répertoriées ci-dessous.Une fois qu'un pragma d' intrinsèque est vu, il soit appliqué à la première définition de fonction contenant une fonction intrinsèque spécifiée.L'effet continue à la fin de le fichier source ou à l'apparence d'un pragma de fonction spécifiant la même fonction intrinsèque.Le pragma d' intrinsèque peut être utilisé uniquement en dehors d'une définition de fonction - au niveau global.

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

_disable

_outp

fabs

strcmp

_enable

_outpw

laboratoires

strcpy

_inp

_rotl

memcmp

strlen

_inpw

_rotr

memcpy

 

_lrotl

_strset

memset

 

_lrotr

abs

strcat

 

Programme les fonctions intrinsèques d'application sont plus rapides car elles n'ont pas la charge mémoire des appels de fonction mais peuvent être plus importantes en raison de code supplémentaire généré.

Spécifique x86

Les intrinsèques _disable et _enable génèrent une instruction en mode noyau de désactiver/activer les interruptions et peuvent être utiles dans les pilotes en mode noyau.

Exemple

Compilez le code suivant à partir de la ligne de commande de « CL - c - FLB sample.c » et examinez sample.asm pour voir qu'ils transforment en x86 l'instruction 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() {
}

Détail x86 de fin

Les fonctions à virgule flottante répertoriées ci-dessous n'ont pas de véritables formes intrinsèques.À la place ils ont des versions qui passent des arguments directement au processeur à virgule flottante plutôt que les poussant sur la pile du programme :

acos

cosh

pow de pow

tanh

asin

fmod

sinh

 

Les fonctions de virgule flottante répertoriées ci-dessous sont dotés de véritables formes intrinsèques lorsque vous spécifiez /Oi, /Og, et /fp : rapide (ou toute autre 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 build 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 des arguments directement au processeur en virgule flottante au lieu d'y exécuter un push sur la pile du programme.

Consultez # fonction pragma pour plus d'informations et un exemple sur la façon d'activer/désactiver des intrinsèques pour un bloc de texte source.

Voir aussi

Référence

Directives pragma et le mot clé de __Pragma

intrinsèques du compilateur