型宣言子(Type Declarator)
型宣言子の説明
C 言語での基本的な「変数のタイプ」 (「データ型」とか、あるいは単に「型」) は、ちいさいほうから、char(8ビット)、short(16)、int(32?)、long(32)、さらに float(32)、double(64) があります。コンパイラ次第では、これ以上の(型)宣言子 (「予約語」の仲間) を追加することも可能ですが、C言語の基準からいえば、左のように限定して挙げられます。さらに、int 型 は非常によく使う変数型にもかかわらず、実は大きさは不定です(32?)。CPU 次第の、扱える大きさのうち (レジスタの大きさ) 、一番大きなものとしての意味が充てられることが多いようです。すなわち、32 ビットの CPU なら、int は long と同じです(long は 32ビット)。コンパイラが自動的に判断するか、又はコンパイラに指定するものです。
これらの宣言子を「修飾」する、unsigned、signed、static、[ const、extern、volatile、その他 ] などの(型)修飾子があります。(型)修飾子は、すべて、unsigned int i ; のように(型)宣言子の前に付けて使います。
「宣言」 と 「定義」 は、なんだか似通った言葉で、特にコンパイルエラーが出てきだす頃から ごちゃごちゃ になっていきます。int i ; は「宣言」 です。注意しましょう。さて、「宣言」 を忘れて唐突に i を使ってしまうと、未「定義」 のシンボル、といわれてしまいます。わたしたちの側が変数の 「宣言」 を忘れているから、コンパイラは i が変数だかもわからない。コンパイラにとって、唐突に現れたその i は 「変数」 というよりは単なる 「シンボル」 として扱うしかありません。変数とは限らないから 未「宣言」 というわけにもいかず、未「定義」 といわざるを得ないのでしょうね。だったら、「宣言」 は基本的には広い意味の 「定義」 のうちに入るでしょう。なお、#define 文を使った マクロ(マクロシンボル)の定義は、もう言ってしまっていますが、「定義」 といいます。関数にかんしては、関数のプロトタイプを、 「宣言」 します。さらに、関数自体の 「定義」 といったら、「関数の具体的なプログラム」 のことを指すでしょう。
※ 関数の「プロトタイプ」 とは、
関数の戻り値の「型」 と、引数の、これまた型を含めた、「並び」 をあらわしている、 表現 (書き方記述) です。int
func( int argc , char *argv[] ) ; // 関数"func"の プロトタイプ宣言
typedef 文や、構造体の定義などにより、「予約語」 以外の、型宣言子を "造る" こともできます。
[トップ] [インデックス] [戻る] [次へ(コ ラム)]