
169
11
章
宣言
宣言は1つ以上の識別子の意義と特性とを決定する。しかし、C11で導入した
_Static_
assert
は例外だ。この静的アサーションは識別子を宣言するのではなく、定数式が 0でな
いかどうかコンパイラに検査させる。静的アサーションは、構文上から宣言に分類されて
いるだけだ。
他の宣言では、宣言した識別子はオブジェクト、関数、型、あるいは列挙定数など他の
ものの名前などである。オブジェクトと関数の識別子はさまざまな型とスコープを持つ。コ
ンパイラはこれらの特性すべてを式で使用する前に理解しておく必要がある。そのため、
翻訳単位は、使われる識別子の宣言を含まねばならない。
goto
文の行き先に使われるラベルはどの文の前にでも置ける。その識別子は出現箇所で
暗黙に宣言される。他の識別子はすべての関数の外であろうとブロックの先頭であろうと、
最初に使う前に明示的宣言が必要となる。C99以来、宣言はブロック内
で文の後でもよい。
識別子は宣言後、そのスコープ内の式の中で使う。オブジェクトと関数の識別子はファ
イルスコープまたはブロックスコープを持つ(「1.6.2識別子スコープ」参照)。
宣言には次のようにさまざまな種類がある。
●
構造体、共用体、列挙タグまたは列挙のメンバ(すなわち、列挙定数)だけを宣言
●
1つ以上のオブジェクトや関数識別子を宣言
●
既存型に対して新たな名前を宣言する
typedef
宣言
●
識別子を宣言せず、コンパイラにアサーションを検査するよう指示する
_Static_ ...