intrinsic
指定 pragma 引數清單中指定的函式呼叫為內建 (Intrinsic)。
#pragma intrinsic( function1 [, function2, ...] )
備註
intrinsic pragma 會告知編譯器,函式具有已知行為。如果會產生較佳的效能,則編譯器可能會呼叫函式,而不會以內嵌指令取代函式呼叫。
內建形式的程式庫函式如下所列。 一旦看見 intrinsic pragma,就會對包含所指定內建函式的第一個函式定義生效。 此作用會持續到原始程式檔的結尾,或是指定相同內建函式的 function pragma 出現為止。 intrinsic pragma 只能在函式定義之外 (也就是在全域層級上) 使用。
下列函式具有內建形式,這些內建形式會在您指定 /Oi 時使用:
|
|||
|
|||
|
使用內建函式的程式速度較快,因為它們不需額外負擔函式呼叫,但是也因為會產生額外的程式碼,所以體積比較大。
x86 專屬資訊
_disable 和 _enable 內建會產生停用/啟用中斷的核心模式指令,在核心模式驅動程式方面可能會很實用。
範例
在命令列中使用 "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() {
}
x86 專屬資訊結束
下列浮點函式沒有真正的內建形式。 它們是使用版本直接將引數傳遞至浮點晶片,而不是將引數推送至程式堆疊:
|
當您指定 /Oi、/Og 和 /fp:fast (或是包含 /Og: /Ox、/O1 和 /O2 的任何選項) 時,下列浮點函式具有真正的內建形式:
|
|
|
您可以使用 /fp:strict 或 /Za 覆寫產生真正內建浮點選項的作業。 在這種情況下,函式會產生為程式庫常式,將引數直接傳遞至浮點晶片,而不是將引數推送至程式堆疊。
如需如何啟用/停用原始程式文字區塊之內建的詳細資訊和範例,請參閱 # pragma 函式。