Dela via


intrinsic pragma

Anger att anrop till funktioner som anges i pragmaargumentlista är inbyggda.

Syntax

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

Anmärkningar

intrinsic pragma meddelar kompilatorn att en funktion har ett känt beteende. Kompilatorn kan anropa funktionen och inte ersätta funktionsanropet med infogade instruktioner, om det resulterar i bättre prestanda.

Biblioteksfunktionerna med inbyggda formulär visas nedan. När en intrinsicpragma visas börjar den gälla vid den första funktionsdefinitionen som innehåller en angiven inbyggd funktion. Effekten fortsätter till slutet av källfilen eller till utseendet på en functionpragma som anger samma inbyggda funktion. intrinsic pragma kan endast användas utanför en funktionsdefinition på global nivå.

Följande funktioner har inbyggda formulär och de inbyggda formulären används när du anger /Oi:

Program som använder inbyggda funktioner är snabbare eftersom de inte har den extra belastningen för funktionsanrop. De kan dock vara större på grund av den ytterligare kod som genereras.

x86-specifikt exempel

De _disable och _enable inbyggda genererar instruktioner i kernelläge för att inaktivera eller aktivera avbrott och kan vara användbara i kernellägesdrivrutiner.

Kompilera följande kod från kommandoraden med cl -c -FAs sample.c och titta på sample.asm för att se att de omvandlas till x86-instruktioner CLI och 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() {
}

Inbyggda flyttalsfunktioner

Dessa flyttalsfunktioner har inte sanna inbyggda former. I stället har de versioner som skickar argument direkt till flyttalschipet i stället för att push-överföra dem på stacken:

Dessa flyttalsfunktioner har sanna inbyggda formulär när du anger /Oi och /fp:fast (eller något alternativ som innehåller /Oi: /Ox, /O1och /O2):

Du kan använda /fp:strict eller /Za för att åsidosätta generering av verkliga inbyggda flyttalsalternativ. I det här fallet genereras funktionerna som biblioteksrutiner som skickar argument direkt till flyttalschipet i stället för att push-överföra dem till programstacken.

Se #pragma function för information och ett exempel på hur du aktiverar och inaktiverar inbyggda objekt för ett block med källtext.

Se även

Pragma-direktiv och nyckelorden __pragma och _Pragma
Kompilatorn är inbyggd