Freigeben über


intrinsic

Gibt an, dass Funktionsaufrufe, die in der Argumentliste des Pragmas angegeben sind, systemintern sind.

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

Hinweise

Das intrinsic-Pragma informiert den Compiler, dass eine Funktion ein bekanntes Verhalten aufweist. Der Compiler kann die Funktion aufrufen und den Funktionsaufruf nicht durch Inlineanweisungen ersetzen, wenn dies zu einer besseren Leistung führt.

Die Bibliotheksfunktionen mit systeminternen Formularen werden nachfolgend aufgeführt. Sobald ein intrinsic-Pragma angezeigt wird, tritt es mit der ersten Funktionsdefinition in Kraft, die eine bestimmte systeminterne Funktion enthält. Die Wirkung dauert bis zum Ende der Quelldatei oder bis zum Auftreten eines function-Pragmas an, das die gleiche systeminterne Funktion angibt. Das intrinsic-Pragma kann nur außerhalb einer Funktionsdefinition auf globaler Ebene verwendet werden.

Die folgenden Funktionen haben systeminterne Formen und die systeminternen Formen werden verwendet, wenn Sie /Oi angeben:

_disable

_outp

fabs

strcmp

_enable

_outpw

labs

strcpy

_inp

_rotl

memcmp

strlen

_inpw

_rotr

memcpy

 

_lrotl

_strset

memset

 

_lrotr

abs

strcat

 

Programme, die systeminterne Funktionen verwenden, sind schneller, da sie nicht den Mehraufwand der Funktionsaufrufe haben, sie können aufgrund des zusätzlich erstellten Codes jedoch größer sein.

x86-spezifisch

Die systeminternen Funktionen _disable und _enable generieren Kernelmodusanweisungen, um Unterbrechungen zu deaktivieren bzw. aktivieren, und können in Kernelmodustreibern hilfreich sein.

Beispiel

Kompilieren Sie den folgenden Code in der Befehlszeile mit "cl -c -FAs sample.c", und überprüfen Sie sample.asm, um zu sehen, dass diese in x86-Anweisungen CLI und STI umgewandelt werden:

// 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-spezifisch beenden

Die unten aufgeführten Gleitkommafunktionen haben keine echten systeminternen Formen. Stattdessen verfügen sie über Versionen, die Argumente direkt an den Gleitkommachip übergeben, anstatt sie auf dem Programmstapel abzulegen:

acos

cosh

pow

tanh

asin

fmod

sinh

 

Die unten aufgeführten Gleitkommafunktionen haben echte systeminterne Formen, wenn Sie /Oi, /Og und /fp:fast angeben (oder eine Option, die /Og: /Ox, /O1 und /O2 enthält):

atan

exp

log10

sqrt

atan2

log

sin

tan

cos

 

 

 

Sie können /fp:strict oder /Za verwenden, um die Generierung von echten systeminternen Gleitkommaoptionen zu überschreiben. In diesem Fall werden die Funktionen als Bibliotheksroutinen erzeugt, die Argumente direkt an den Gleitkommachip übergeben, statt sie auf dem Programmstapel abzulegen.

Weitere Informationen und ein Beispiel, wie systeminterne Funktionen für einen Block an Quelltext aktiviert/deaktiviert werden, finden Sie unter # pragma-Funktion.

Siehe auch

Referenz

Pragma-Direktiven und das __Pragma-Schlüsselwort

Intrinsische Compilerfunktionen