Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

2.11.17 no_side_effect

#pragma no_side_effect(funcname[, funcname…])

funcname には、現行の翻訳単位内の関数名を指定します。関数は、プラグマの前にプロトタイプまたは空のパラメータリストで宣言する必要があります。またプラグマはその関数の定義より前に指定されていなければいけません。指定された関数 funcname について、このプラグマは、その関数がどのような種類の副作用も一切持たず、渡された引数のみに依存する結果値を返すことを宣言します。さらに、funcname とそこから呼び出されたすべての子孫関数は、次のように振る舞います。

  • 呼び出し時点で呼び出し側が認識できるプログラム状態の一部に、読み出しまたは書き込みのためにアクセスすることはありません。

  • 入出力を実行しません。

  • 呼び出し時点で認識できるプログラム状態のどの部分も変更しません。

コンパイラはこの情報を、その関数を用いる最適化に利用することができます。関数に副作用があると、この関数を呼び出すプログラムの実行結果は未定義になります。コンパイラはこの情報をレベル 3 以上の最適化に利用します。