Condividi tramite


intrinsic

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

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

Note

funzione intrinseca il pragma indica al compilatore che una funzione è noto il comportamento.Il compilatore può chiamare la funzione e non sostituire la chiamata di funzione con le istruzioni in linea, se opzione determinerà le prestazioni migliori.

Le funzioni della libreria con i form intrinseci sono elencate in.Dopo aver funzione intrinseca il pragma è visto, verrà applicata alla prima definizione di funzione che contiene una funzione intrinseca specificata.L'effetto continua fino alla fine del file di origine o all'aspetto di un oggetto funzione pragma che specifica la stessa funzione intrinseca.funzione intrinseca il pragma può essere utilizzato solo all'esterno di una definizione di funzione e a livello globale.

Le seguenti funzioni presentano form intrinseci e i form intrinseci sono utilizzati quando si specifica /Oi:

_disable

_outp

fabs

strcmp

_enable

_outpw

lab

strcpy

_inp

_rotl

memcmp

strlen

_inpw

_rotr

memcpy

 

_lrotl

_strset

memset

 

_lrotr

abs

strcat

 

I programmi che utilizzano funzioni intrinseche risultano più veloci perché sono prive l'overhead delle chiamate di funzione ma possono superare a causa del codice generato.

x86 Specific

Gli intrinseci _disable e _enable generano le istruzioni in modalità kernel o la disabilitazione delle interruzioni e possono essere utili in driver in modalità kernelli.

Esempio

Compilare il codice dalla riga di comando con “Cl - c (FAs sample.c„ ed esaminare sample.asm per verificare che diventano in x86 istruzioni 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() {
}

x86 finale specifico

Le funzioni a virgola mobile elencate di seguito non sono veri form intrinseci.Anziché dispongono di versioni che passano argomenti direttamente a fiche a virgola mobile anziché spingendoli sullo stack del programma:

acos

cosh

a causa della rimozione di pow

tanh

asin

fmod

sinh

 

Le funzioni a virgola mobile elencate di seguito sono veri form intrinseci quando si specifica /Oi, /Oge /fp: veloce (o un'opzione che include /Og: /Ox, /O1e /O2):

atan

exp

log10

sqrt

atan2

log

sin

tan

cos

 

 

 

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

vedere # funzione di pragma per informazioni e un esempio su come abilitare o disabilitare gli intrinseci per un blocco di testo originale.

Vedere anche

Riferimenti

Direttive pragma e la parola chiave di __Pragma

Funzioni intrinseche del compilatore