Condividi tramite


intrinsic

Specifica che le chiamate alle funzioni specificate nell'elenco di argomenti del pragma sono intrinseche.

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

Note

Il pragma intrinsic indica al compilatore che il comportamento di una funzione è noto. Il compilatore può chiamare la funzione e non sostituire la chiamata di funzione con istruzioni inline, se questo può garantire prestazioni migliori.

Le funzioni di libreria con formato intrinseco sono elencate di seguito. Una volta che viene rilevato un pragma intrinsic, verrà applicato alla prima definizione di funzione che contiene una funzione intrinseca specificata. L'effetto continua fino alla fine del file di origine o alla rilevazione di un pragma function che specifica la stessa funzione intrinseca. Il pragma intrinsic può essere utilizzato solo all'esterno di una definizione di funzione e a livello globale.

Le seguenti funzioni hanno formati intrinseci che vengono utilizzati quando si specifica /Oi:

_disable

_outp

fabs

strcmp

_enable

_outpw

labs

strcpy

_inp

_rotl

memcmp

strlen

_inpw

_rotr

memcpy

 

_lrotl

_strset

memset

 

_lrotr

abs

strcat

 

I programmi che utilizzano le funzioni intrinseche sono più veloci in quanto non hanno il sovraccarico delle chiamate di funzione, ma potrebbero essere di dimensioni maggiori a causa del codice aggiuntivo generato.

Sezione specifico x86

Le funzioni intrinseche _disable e _enable generano istruzioni in modalità kernel per la disabilitare/abilitare gli interrupt e possono essere utili in driver in modalità kernel.

Esempio

Compilare il codice seguente dalla riga di comando con "cl -c -FAs sample.c" ed esaminare il file sample.asm per verificare che venga trasformano in istruzioni x86 CLI e 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() {
}

Fine sezione specifica x86

Le funzioni a virgola mobile elencate di seguito non hanno formati intrinseci reali. Tali funzioni hanno versioni che passano argomenti direttamente al chip a virgola mobile anziché inserirli nello stack del programma:

acos

cosh

pow

tanh

asin

fmod

sinh

 

Le funzioni a virgola mobile elencate di seguito hanno formati intrinseci reali quando si specifica /Oi, /Og e /fp:fast (o qualsiasi funzione che include /Og: /Ox, /O1 e /O2):

atan

exp

log10

sqrt

atan2

log

sin

tan

cos

 

 

 

È possibile utilizzare l'opzione del compilatore /fp:strict o /Za per eseguire l'override della generazione di opzioni a virgola mobile intrinseche reali. In tal caso le funzioni vengono generate come routine della libreria che passano gli argomenti direttamente al chip a virgola mobile anziché inserirli nello stack del programma.

Per informazioni e un esempio su come abilitare o disabilitare le funzioni intrinseche per un blocco del testo di origine, vedere funzione # pragma.

Vedere anche

Riferimenti

Direttive pragma e parola chiave __Pragma

Intrinseci del compilatore