C言語 変数と定数

C言語

変数

変数とは、データをメモリに記憶するために必要なもので、データ保管用の箱のようなものをイメージするとわかりやすいかと思います。

そのデータ保管用の箱である変数を使うためには、決めるべき2つのことがあります。1つは、箱の種類。もう1つは、箱の名前です。

一般的に、箱の種類のことを、「変数の型」といいます。また、箱の名前を「変数名」と呼びます。この2つをプログラムの中で決めることによって、自動的に箱の場所と大きさが割り当てられます。箱の場所のことを「アドレス」と呼びます。

この変数を使うことでプログラムの中のデータのやり取りを行うことができるようになります。

変数名

変数名には、次のルールがあります。

変数名のルール
  • 英字(アンダースコア[ _ ]を含む)、又は、数字で作る
  • 先頭文字は、英字のみ可能である
  • 大文字と小文字は異なるものとして扱う
  • 一般的に変数名は、小文字、記号定数は大文字で記述する
  • 予約語は変数名に使用できない

予約語とは、C言語で使用される型の名前、制御文の名前になります。

予約語

int,char,long,short,float,double,signed,unsigned,void,typedef,

struct,union,enum,auto,register,static,extern,const,volatile

if,else,switch,case,for,while,do,goto,break,default,return

この予約語以外で変数名の命名規則に従って名前を付けることになります。

変数の型

変数を定義するときに型を指定する必要があります。この型の指定により、変数の種類と大きさが決まります。変数の型には、次のようなものがあります。

型名サイズ[バイト]説明範囲
char1符号つき整数  -128~127
unsigned char1符号なし整数  0~255
short2符号つき整数  -32,768~32,767
unsigned short2符号なし整数  0~65,535
long4符号つき整数-2,147,483,648~2,147,483,647
unsigned long4符号なし整数0~4,294,967,295
int2/4符号つき整数(環境依存)
float4浮動小数点数-3.4028235E+38~3.4028235E+38
double8浮動小数点数(倍精度)
void値なし

変数の書き方

変数を使うために、宣言文を書きます。

宣言文は、次のように書きます。

変数の型 変数名 ;

最初に入れておきたい値がある場合、初期値を代入しておくこともできます。

変数の型 変数名 =  ;

宣言文の一番最後には、セミコロン「;」を付けます。これにより一文が完結したことをコンパイラに知らせます。このセミコロンがないとコンパイル時にエラーメッセージが出ますので忘れないように注意が必要です。

変数の宣言文の例

int a = 123;

int b;

char a = ‘a’;

double v1 = 1.23;

double v2 = 1.0E+10;

文字を代入する場合は、シングルクォーテーション「’ ‘」で囲います。

改行などの特殊な文字を代入する場合、「\」と「文字」で表現します。

特殊な文字

  \n     改行

  \0     null文字(10進数で0)

  \\     ¥文字

  \’     シングルクォーテーション

  \”     ダブルクォーテーション

  \?     クエスチョンマーク

バックスラッシュとエンマークは同じ文字です。

浮動小数点数は、小数点を付けて表しますが、e又はEを付けて指数で表現することもできます。この場合、e,Eの後ろに続く数値が10のべき乗の値となります。

定数

定数とは、プログラムの実行前から値が決まっていて、プログラム実行中にその値が変わらないときに使用するデータです。

わざわざ定数を使わなくても変数でよいようにも思いますが、定数を使る理由として次のようなことがあげられるのではないかと思います。

定数を使う理由
  • 誤った値の変更を防止するため
  • RAM領域の節約のため

RAM領域の容量を気にすることがなく、小さなプログラムのもの、あるいは、ひとりで作成したプログラムで中身が理解できている状態であれば、定数でなく、変数を使ってもよいかもしれません。

しかし、機器に搭載する組み込みプログラムなどのハードウェアによる制約がある場合、RAM領域の容量を考慮しながらプログラムを設計する必要があります。そのようなシステム開発では、値の変更がないデータは、定数として扱うほうが良いかと思います。

また、複数人で開発するような規模の大きいプログラム、自分で作ったけど、後から見返してみてよくわからなくなってしまうようなプログラムにおいても、初期値から変更のないデータは、定数を使うべきであると考えます。そのようなデータを変数として扱ってしまうと、プログラムを作成しているときや修正しているときに誤ってその値を変更してしまう可能性がでてきてしまうからです。

このような観点から定数をうまく利用していく必要があると思います。

定数の書き方

定数は、変数の宣言と同じように書くのですが、変数の時との違いは、型の前に「const」という文言を付けることです。

const 変数の型 変数名 =  ;

定数の宣言文の例

 const int a = 123;

定数の場合は、必ず、宣言時に値を代入する必要があります。

宣言以降、定数データを変更しようとするプログラムがあれば、コンパイル時にエラーとなって通知されます。これにより誤った変更を防止できるということになります。

記号定数

記号定数とは、プログラム中の数値(マジックナンバー)を記号に置き換えることで、特定の文字列で数値を表現することです。

プログラム中のゼロ以外の数値をマジックナンバーといいますが、基本的に、直接、数値のまま書くことはよろしくないとされています。数値的な意味合いがよくわからなかったり、複数個所で数値が出てくる場合は、記述間違いの原因にもなります。また、修正時には、修正漏れの発生も懸念されます。このようなことを防止するため、記号定数を使います。

記号定数の書き方

記号定数は次のように書きます。

#define 記号定数名 置き換える値

記号定数の定義例

#define HIGH 1

#define LOW 0

記号定数は、一般的に大文字で記述されます。

記号定数の記述の最後にセミコロン「;」がないことに注意が必要です。

この例ですと、プログラム中で「HIGH」と記述すると、その箇所は、すべて数値「1」に、「LOW」と記述すると「0」に置き換わります。

列挙定数

列挙定数とは、整数定数を順番に並べたものです。

列挙した整数定数に数値指定しない場合、0から順次整数値が割り振られていきます。

定数で特に数値に意味合いがないものや数値を順番に割り振りたいものを作りたいときに列挙定数を使うと便利です。

列挙定数の書き方

列挙定数は次のように書きます。

enum 列挙タグ名 { 定数リスト };

列挙定数の定義例

enum boolean{ NO , YES };

enum months{ JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC };

booleanの「NO」には、「0」、「YES」には、「1」が割り当てられます。

また、monthsは、「JAN」に「1」が指定されているので、「JAN」は、「1」が割り当てられ、以降、「FEB」に「2」、「MAR」に「3」といったように整数値が順次割り当てられることになります。

コメント

タイトルとURLをコピーしました