宣言には型指定子と宣言子(但し,タグ或いは列挙体メンバがある場合を除く)が必須です。必須ではないものの,データの扱いに特定の属性を付与するもののとして「型修飾子」があります。型修飾子として使用されるキーワード(予約語)は,const
,volatile
,そして restrict
の3つです。
型修飾子xxx
が付された型をxxx 修飾型(xxx -qualified type)と呼びます。例えば,
const int c = 1;
といった場合,オブジェクト c
は const修飾型(const-qualified type)であり,その型は const int
です。また,
const int m[8];
の場合,const修飾型 const int
の配列(各要素が const修飾型)であり,配列型(式)m
自体は const修飾型ではありません。[C99, 6.7.3, 8] ポインタの場合,例えば,
const int *p; int *const cp;
のポインタ p
は const修飾型 const int
へのポインタでその型は const int *
ですが,ポインタ cp
は非修飾型 int
へのポインタであり,ポインタ cp
自体が const修飾型となります。[C99, 6.7.5.1]