共用方式為


intrinsic

指定 pragma 引數清單中指定的函式呼叫為內建 (Intrinsic)。

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

備註

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

內建形式的程式庫函式如下所列。 一旦看見 intrinsic pragma,就會對包含所指定內建函式的第一個函式定義生效。 此作用會持續到原始程式檔的結尾,或是指定相同內建函式的 function pragma 出現為止。 intrinsic pragma 只能在函式定義之外 (也就是在全域層級上) 使用。

下列函式具有內建形式,這些內建形式會在您指定 /Oi 時使用:

_disable

_outp

fabs

strcmp

_enable

_outpw

labs

strcpy

_inp

_rotl

memcmp

strlen

_inpw

_rotr

memcpy

 

_lrotl

_strset

memset

 

_lrotr

abs

strcat

 

使用內建函式的程式速度較快,因為它們不需額外負擔函式呼叫,但是也因為會產生額外的程式碼,所以體積比較大。

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 專屬資訊結束

下列浮點函式沒有真正的內建形式。 它們是使用版本直接將引數傳遞至浮點晶片,而不是將引數推送至程式堆疊:

acos

cosh

pow

tanh

asin

fmod

sinh

 

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

atan

exp

log10

sqrt

atan2

log

sin

tan

cos

 

 

 

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

如需如何啟用/停用原始程式文字區塊之內建的詳細資訊和範例,請參閱 # pragma 函式

請參閱

參考

Pragma 指示詞和 __Pragma 關鍵字

編譯器內建