宣言

関数と変数は、使用する前にそのと名前を宣言する必要があります。宣言の構文は次のとおりです。
構文 [storage-class] [type-qualifier]... type-specifier declarator [= initializer]

ここで storage-class には最大 1 つの記憶クラスを指定します。type-qualifier には任意の数の型修飾子を指定します。型指定子 type-specifier は次のいずれかです。
構文 [signed | unsigned] [long | short] [int] // 2〜4 バイトの整数
[signed | unsigned] char // 1 バイトの整数
float | double | long double // 浮動小数点数
void
struct [tag] [{ declarator... }] // 構造体
union [tag] [{ declarator... }] // 共用体
enum tag // 列挙

signedunsignedlongshort を 1 つ以上指定した場合、int は省略できます。

宣言子 declarator は次のいずれかです。
構文 name // 変数名
* declarator // ポインタ
declarator [ number ] // 配列
declarator ( [arguments]... ) // 関数宣言
[type-qualifier]... declarator [type-qualifier]...

ここで name は変数名、number は配列の要素数です。*ポインタ[ ]配列の宣言で使用します。( )関数や関数へのポインタの宣言で使用し、arguments はその関数の引数です (省略可)。

初期化子 initializerは次のいずれかです。宣言した変数の型と一致する必要があります。
構文 <整数リテラル>
<浮動小数点数リテラル>
<文字リテラル>
<文字列リテラル>
<>
<値リスト>

広域変数静的変数の初期化では、定数 (または定数だけからなる式 ) しか使用できませんが、局所変数の初期化では、変数や関数呼び出しを含む式も使用できます。

<値リスト>{ } の中に宣言をカンマで区切って並べたもので、構文は次のとおりです。
構文 { <宣言> ,... }

値リストは、配列または構造体の初期化に使用します。

参照