Share via


intrinsic pragma

指定對 's 引數清單中指定 pragma 之函式的呼叫是內建的。

語法

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

備註

intrinsicpragma 會告訴編譯器函式具有已知行為。 如果會產生較佳的效能,則編譯器可能會呼叫函式,而不會以內嵌指令取代函式呼叫。

內建形式的程式庫函式如下所列。 intrinsicpragma 看到 之後,它會在包含指定內建函式的第一個函式定義中生效。 效果會繼續到來源檔案的結尾,或指定相同內建函式的外觀 functionpragma 。 intrinsicpragma 只能在全域層級的函式定義之外使用 。

下列函式具有內建形式,而且當您指定 /Oi 時會使用內建表單:

使用內建函式的程式較快,因為它們沒有函式呼叫的額外負荷。 不過,它們可能會因為產生的額外程式碼而變大。

x86 特定範例

_enable 內部 _disable 函數會產生核心模式指示來停用或啟用中斷,而且在核心模式驅動程式中很有用。

使用 從命令列 cl -c -FAs sample.c 編譯下列程式碼,並查看 sample.asm 它們是否變成 x86 指示 CLI 和 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() {
}

內建浮點函式

這些浮點函式沒有真正的內建形式。 相反地,它們具有將引數直接傳遞至浮點晶片的版本,而不是將引數推送到堆疊上:

當您指定 /Oi/fp:fast 時,這些浮點函式具有真正的內建形式(或任何包含 /Oi/Ox/O1/O2 的選項):

您可以使用 /fp:strict/Za 來覆寫真實內建浮點數選項的產生。 在這種情況下,函式會產生為程式庫常式,將引數直接傳遞至浮點晶片,而不是將引數推送至程式堆疊。

如需如何啟用和停用來源文字區塊內建函式的資訊和範例,請參閱 #pragma function

另請參閱

Pragma 指示詞和 __pragma_Pragma 關鍵字
編譯器內建函式