function pragma

告知編譯器產生對 引數清單中指定 pragma 之函式的呼叫,而不是內嵌它們。

語法

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

備註

內建函式通常會以內嵌程式碼產生,而不是函式呼叫。 如果您使用 intrinsic pragma/Oi 編譯器選項來告知編譯器產生內建函式,您可以使用 functionpragma 來明確強制呼叫函式。 functionpragma 看到 之後,它會在包含指定內建函式的第一個函式定義中生效。 效果會繼續到來源檔案的結尾,或指定相同內建函式的外觀 intrinsicpragma 。 您只能在全域層級使用 functionpragma 函式外部。

如需具有內建表單的函式清單,請參閱 intrinsic pragma

範例

// pragma_directive_function.cpp
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// use intrinsic forms of memset and strlen
#pragma intrinsic(memset, strlen)

// Find first word break in string, and set remaining
// chars in string to specified char value.
char *set_str_after_word(char *string, char ch) {
   int i;
   int len = strlen(string);  /* NOTE: uses intrinsic for strlen */

   for(i = 0; i < len; i++) {
      if (isspace(*(string + i)))
         break;
   }

   for(; i < len; i++)
      *(string + i) = ch;

   return string;
}

// do not use strlen intrinsic
#pragma function(strlen)

// Set all chars in string to specified char value.
char *set_str(char *string, char ch) {
   // Uses intrinsic for memset, but calls strlen library function
   return (char *) memset(string, ch, strlen(string));
}

int main() {
   char *str = (char *) malloc(20 * sizeof(char));

   strcpy_s(str, sizeof("Now is the time"), "Now is the time");
   printf("str is '%s'\n", set_str_after_word(str, '*'));
   printf("str is '%s'\n", set_str(str, '!'));
}
str is 'Now************'
str is '!!!!!!!!!!!!!!!'

另請參閱

Pragma 指示詞和 __pragma_Pragma 關鍵字