Oracle Solaris Studio 12.2: C ユーザーガイド

2.11.17 no_side_effect

#pragma no_side_effect(funcname[, funcname…] )

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

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