前にも紹介したように、変数を使う場合には宣言をしなくてはなりません。
何を宣言するかというと、どんなデータの型かと、名前、初期値です。初期値は
省略することができます。
どこで宣言をするかというと、関数の外か、ブロックの最初です。
関数の外で宣言した場合、グローバル変数といい、そのファイルの中のすべての場所で
使用することができます。ただしこれはあまり良い宣言方法ではありません。
なぜならば、複数のプログラマーで大きいプログラムを作っている場合、
不正に書き換えられてしまう可能性があり、バグの発生につながる可能性があるからです。
特別な理由がある場合を除いて、後者のブロックの最初で宣言するべきです。
次にデータの型について説明します。C言語では次の型が用意されています。
データの種類 |
型 |
バイト長 |
数値の範囲 |
整数 |
(signed) char |
1 |
-128〜+127 |
整数 |
unsigned char |
1 |
0〜+255 |
整数 |
(signed) short (int) |
2 |
-32768〜+32767 |
整数 |
unsigned short (int) |
2 |
0〜+65535 |
整数 |
(signed) long (int) |
4 |
-2147483648〜+2147483647 |
整数 |
unsigned long (int) |
4 |
0〜+4294967295 |
整数 |
(signed) int |
2 or 4 |
(signed) short (int)もしくは (signed) long(int)と同じ |
整数 |
unsigned int |
2 or 4 |
(signed) short (int)もしくは (signed) long(int)と同じ |
小数 |
float |
4 |
仮数部232、指数部28 |
小数 |
double |
8 |
仮数部252、指数部211 |
括弧で書かれている部分は省略することができます。int、unsigned intは、古いコンパイラ
では2バイト長、新しいコンパイラでは4バイト長で確保されます。したがって、絶対に
2バイトでなければならない場合は、short、unsigned short、4バイトでなければならない場合は
long、unsigned longで宣言します。どちらでも構わない場合はint、unsigned intで宣言します。
char型は1バイトで、文字1文字を格納するのにちょうど良い大きさです。しかし
数値を格納するにはちょっと小さな変数です。したがって主に1文字を格納するのに
使いますが、文字を格納する変数ではありません。小さな数字しか格納しないのであれば、
char型を使用しても構いません。
なぜintが2バイトの場合と4バイトの場合があるかは、コンピュータの進化に関係しています。
16bitコンピュータで4バイト長の変数を操作するのには、処理に時間がかかります。
そこで数字のデフォルトをint型として、shortにしていました。しかしどうしてもshortでは
小さい場合にはlong型も使えるようにしました。コンピュータが32bitに進化すると、
long型を処理する場合にもshort型と同じ時間で処理できるようになったため、
数字型変数のデフォルトint型とlong型を同じにしたのです。このような経緯があるため、
数字のデフォルトであるint型がコンパイラによって異なるという問題が発生しました。
さて、話を戻して、宣言の仕方を解説しましょう。
宣言は最初にお話ししたように、ブロックの最初、もしくは関数の外です。関数の外に
宣言するグローバル変数はもっと先でお話しします。当分の間はブロックの最初で次の
ように宣言します。
int a; // 変数名「a」をint型で宣言
char ch1, ch2; // 変数名「ch1」と「ch2」をchar型で宣言
unsigned long l; // 変数名「l」をunsigned long型で宣言
|
変数の宣言を行っただけだと、
その変数にはどんな値が入っているかわかりません。