intrinsic
pragma
指定對 『s 自變數清單中指定 pragma之函式的呼叫是內建的。
語法
#pragma intrinsic(
function_1 [,
function_2 ... ])
備註
intrinsic
pragma會告訴編譯程式函式具有已知行為。 如果會產生較佳的效能,則編譯器可能會呼叫函式,而不會以內嵌指令取代函式呼叫。
內建形式的程式庫函式如下所列。 intrinsic
pragma看到 之後,它會在包含指定內部函數的第一個函式定義中生效。 效果會繼續到來源檔案的結尾,或指定相同內建函式的外觀 function
pragma 。 intrinsic
pragma只能在全域層級的函式定義之外使用 。
下列函式具有內建形式,而且當您指定 /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
。