内部

指定对杂注参数列表中指定的函数的调用是内部的。

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

备注

内部杂注告知编译器某个函数已了解行为。编译器可以调用函数,并且不将函数调用替换为内联说明(如果将实现更好的性能)。

下面列出了带内部形式的库函数。 一旦看到内部杂注,它在包含指定的内部函数的第一个函数定义处生效。 该效果持续到源文件的末端或指定相同内部函数的函数杂注外观。 内部杂注仅能在函数定义之外使用 - 在全局级。

以下函数具有内部形式,在指定 /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 关键字

编译器内部函数