intrinsic pragma

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

Składnia

#pragma intrinsic( function_1 [,function_2 ... ])

Uwagi

Polecenie intrinsicpragma informuje kompilator, że funkcja ma znane zachowanie. Kompilator może wywołać funkcję i nie zastąpić wywołania funkcji instrukcjami wbudowanymi, jeśli spowoduje to lepszą wydajność.

Poniżej wymieniono funkcje biblioteki z formularzami wewnętrznymi. Gdy element intrinsicpragma jest widoczny, ma zastosowanie w pierwszej definicji funkcji zawierającej określoną funkcję wewnętrzną. Efekt jest kontynuowany na końcu pliku źródłowego lub na wygląd funkcji wewnętrznej określającej tę samą funkcję wewnętrzną functionpragma . Można intrinsicpragma jej używać tylko poza definicją funkcji na poziomie globalnym.

Następujące funkcje mają formularze wewnętrzne, a formularze wewnętrzne są używane podczas określania elementu /Oi:

Programy korzystające z funkcji wewnętrznych są szybsze, ponieważ nie mają obciążenia związanego z wywołaniami funkcji. Mogą one być jednak większe z powodu wygenerowanego dodatkowego kodu.

Przykład specyficzny dla architektury x86

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

Skompiluj następujący kod z wiersza cl -c -FAs sample.c polecenia i przyjrzyj sample.asm się temu, aby zobaczyć, że zamieniają się w interfejs wiersza polecenia x86 i interfejs 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() {
}

Wewnętrzne funkcje zmiennoprzecinkowe

Te funkcje zmiennoprzecinkowe nie mają prawdziwych formularzy wewnętrznych. Zamiast tego mają wersje, które przekazują argumenty bezpośrednio do mikroukładu zmiennoprzecinkowego, zamiast wypychać je na stos:

Te funkcje zmiennoprzecinkowe mają prawdziwe formy wewnętrzne podczas określania /Oi wartości i /fp:fast (lub dowolnej opcji, która obejmuje /Oi: /Ox, /O1i /O2):

Można użyć /fp:strict funkcji lub /Za zastąpić generowanie rzeczywistych opcji zmiennoprzecinkowych true. W takim przypadku funkcje są generowane jako procedury bibliotek, które przekazują argumenty bezpośrednio do mikroukładu zmiennoprzecinkowego, zamiast wypychać je do stosu programu.

Zobacz #pragma function , aby uzyskać informacje i przykład włączania i wyłączania funkcji wewnętrznych dla bloku tekstu źródłowego.

Zobacz też

Dyrektywy Pragma i __pragma słowa kluczowe i _Pragma
Funkcje wewnętrzne kompilatora