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 キーワード