10.13 __pure

__pure キーワードは、関数宣言が純関数であることを示します。

使用法

関数は、以下の場合のみ、純関数になります。
  • 結果が引数の値のみに依存する場合
  • 関数に副作用がない場合
__pure は、関数修飾子です。これは、関数の型に影響します。

このキーワードには、同等の関数属性 __attribute__((const)) があります。
純関数は、共通部分式の削除の対象になります。

デフォルト

デフォルトでは、関数は非純関数であることが想定されます。

制約条件

純関数として宣言された関数には、副作用はありません。たとえば、純関数には以下の制限があります。
  • 非純関数の呼び出しはできません。
  • コンパイラは、スタックメモリを除いて純関数がメモリにアクセスしないことを想定しているため、純関数はグローバル変数もデリファレンスポインタも使用することができません。
  • 同じパラメータで 2 度呼び出される場合、純関数は毎回同じ値を返す必要があります。

int factr(int n) __pure
{
    int f = 1;
    while (n > 0)
        f *= n--;
    return f;
}
関連する概念
5.17 同じ引数を使用して呼び出されたときに同じ結果を返す関数
5.19 関数を ARM 関数修飾子で修飾するときの後置構文に関する推奨事項
関連する参考文書
5.18 純関数と非純関数の比較
10.33 __attribute__((const)) 関数属性
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.