Udostępnij za pośrednictwem


— funkcja

Określa, że wywołania funkcji określonej na liście argumentów dyrektywy są wewnętrzne.

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

Uwagi

Dyrektywa intrinsic informuje kompilator, że funkcja ma znane zachowanie. Kompilator może wywołać funkcję i nie zastępować wywołania funkcji wbudowaną instrukcją, jeżeli zapewni to lepszą wydajność.

Poniżej wymieniono funkcje biblioteczne z postaciami wewnętrznymi.Kiedy dyrektywa intrinsic zostanie zauważona, dyrektywa ma wpływ na pierwszą definicję funkcji zawierającą określoną funkcję wewnętrzną.Dyrektywa wpływa na wszystkie funkcje do końca pliku z kodem źródłowym lub do pojawienia się dyrektywy function określającą tę samą funkcję wewnętrzną.Dyrektywa intrinsic może być używana tylko poza definicją funkcji — na poziomie globalnym.

W następujących funkcjach występują formy wewnętrzne i to one są używane podczas określenia /Oi:

_disable

_outp

fabs

strcmp

_enable

_outpw

labs

strcpy

_inp

_rotl

memcmp

strlen

_inpw

_rotr

memcpy

 

_lrotl

_strset

memset

 

_lrotr

abs

strcat

 

Programy używające funkcji wewnętrznych są szybsze, ponieważ nie mają obciążenia związanego z wywołaniem funkcji, ale mogą być większe ze względu na dodatkowy wygenerowany kod.

Szczególne dla x86

Funkcje wewnętrzne _disable i _enable generują instrukcje trybu jądra do włączania i wyłączania przerwań i mogą być przydatne w sterownikach trybu jądra.

Przykład

Skompiluj następujący kod z wiersza polecenia używając "cl - c-FAs sample.c" i przyjrzyj się plikowi sample.asm, aby zobaczyć, że zmieniają się one w instrukcje x86 CLI i 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() {
}

Koniec fragmentu szczególnego dla x86

Zmiennoprzecinkowe funkcje wymienione niżej nie posiadają prawdziwej formy wewnętrznej.Zamiast tego mają wersje, w których argument jest przekazywany bezpośrednio do układu scalonego liczb zmiennoprzecinkowych zamiast wrzucać go na stos programu:

acos

cosh

pow

tanh

asin

fmod

sinh

 

Funkcje zmiennoprzecinkowe wymienione niżej mają prawdziwą formę wewnętrzną po określeniu /Oi, /Og, i /fp:fast (lub dowolnej opcji, która zawiera /Og: /Ox, /O1i /O2):

atan

exp

log10

sqrt

atan2

log

sin

tan

cos

 

 

 

Można użyć /fp:strict lub /Za do nadpisania generowania opcji prawdziwych zmiennoprzecinkowych funkcji wewnętrznych.W takim przypadku funkcje są generowane jako biblioteka procedur, które przekazują argumenty bezpośrednio do układu scalonego liczb zmiennoprzecinkowych zamiast wrzucać je na stos programu.

Zobacz # funkcja pragma aby uzyskać informacje i zobaczyć przykład o tym, jak włączyć/wyłączyć funkcje wewnętrzne w bloku tekstu źródłowego.

Zobacz też

Informacje

Dyrektywy pragma i słowo kluczowe __Pragma

Funkcje wewnętrzne kompilatora