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

D.1.11 配列宣言子で使用可能な Static およびそのほかの型修飾子

6.7.5.2 配列宣言子

関数宣言子内のパラメータの配列宣言子で static キーワードを使用することが可能になりました。この場合は、コンパイラが、宣言する関数に多数の要素が引き渡されることを少なくとも認識することができます。これにより、オプティマイザで従来は不可能だった想定が可能になります。

C コンパイラは、配列パラメータをポインタに変換します。したがって、void foo(int a[])void foo(int *a) と同義になります。

void foo(int * restrict a); などの型修飾子を指定すると、C コンパイラはそれを配列文 void foo(int a[restrict]); で表現します。これは、実質的には制限付きポインタを宣言するのと同義です。

C コンパイラは、配列サイズに関する情報を保持するためにも static 修飾子を使用します。たとえば、void foo(int a[10]) を指定した場合でも、コンパイラはこれを void foo(int *a) と表現します。ポインタが NULL ではなく、少なくとも 10 個の要素を持つ整数配列へのポインタであることをコンパイラに認識させるには、void foo(int a[static 10]) のように static 修飾子を使用します。