5.73 C99 の制限付きポインタ

C99 の restrict は、さまざまなオブジェクトのポインタ型や関数パラメータ配列が重複するメモリ領域を指さないことをコンパイラに指示するキーワードです。

したがってコンパイラは、エイリアスが生成されるために行われなかった最適化を実行できます。
以下の例では、ポインタ a は、ポインタ b と同じメモリ領域を指しません(また、指すことがあってはなりません)。
void copy_array(int n, int *restrict a, int *restrict b)
{
    while (n-- > 0)
        *a++ = *b++;
}
void test(void)
{
    extern int array[100];
    copy_array(50, array + 50, array);    // 有効
    copy_array(50, array + 1, array);     // 定義されていない動作
}
ただし、 restrict で修飾されたポインタは、異なる配列や、配列内の異なる領域を指すことができます。
コードでは、 restrict で修飾されたポインタが重複するメモリ領域を指さないようにする必要があります。
C90 および C++ で許可される __restrict は、 restrict と同じ意味です。
--restrict を使用すると、 restrict を C90 および C++ で使用できます。
関連する概念
5.59 C99 の新しい言語機能
5.61 C99 および C90 の // コメント
5.62 C99 の複合リテラル
5.63 C99 の指定済みのイニシャライザ
5.64 C99 の 16 進浮動小数点数
5.65 C99 のフレキシブル配列メンバ
5.66 C99 の __func__ 定義済み識別子
5.67 C99 の inline 関数
5.68 C99 および C90 の long long データ型
5.69 C99 の使用する引数の数が一定でないマクロ
5.70 C99 の宣言とステートメントの混合
5.71 C99 の選択および反復ステートメントの新しいブロック有効範囲
5.72 C99 の _Pragma 処理命令
5.75 C99 の複素数
関連する参考文書
8.164 --restrict、--no_restrict
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.