概要
変数には型があり、これにより、データの性質、数値、範囲が表現される。この型を示すのに、int, unsigned const等が変数の前に指定される。
基本データ型
型 |
名称 |
備考 |
|
|
|
char |
文字型 |
|
int |
整数型 |
|
float |
浮動小数点型 |
|
short |
短長整数型 |
|
long |
倍長整数型 |
|
double |
倍制度実数型 |
long double(拡張精度実数型) |
void |
型なし |
|
サイズ修飾子
long, short は、基本データのサイズを修飾し、標準以上 or 標準以下を指定する。
例)
型指定 |
内容 |
|
|
short int |
int型サイズ以下 |
long int |
int型サイズ以上 |
long double |
double型サイズ以上 |
short int ≦ int ≦ long int
float ≦ double ≦ long double
符号修飾子
signed, unsigned は、符号を修飾する。
例)
型指定 |
範囲 |
|
|
char |
-128~127 |
signed char |
-128~127 |
unsigned char |
0~255 |
尚、明示的に、「signed」を使用することはあまりない。
型修飾子
const
const修飾子は、値の
初期化はできるが、変更できない変数を指定する。
例)
const int i = 10;
// コンパイルエラーとなる。
i = 10;
// ポインタ変数pが保持しているアドレスにある変数を上書きできない。
const int *p;
// pが保持しているアドレスを変更できない
int *const p;
C++の場合、明確に型がわかるので、「#define」を使用するよりは「const」を利用する方がよい。
例)
#define MAX_SIZE (256)
const int MAX_SIZE = 256;
volatile
コンパイラの判断によって、最適化されることを禁止する。
最適化により、ある変数の値が変更される場合、プログラマが意図しない動作になってしまう可能性がある。
基本的に、最適化方法はソースコード上だけでは、見ても判断つかない。
記憶クラス指定子
auto(自動変数)
C言語では、デフォルトで「auto」が指定されているので、全く不要な指定子です。
static(静的変数)
静的変数は、常にメモリを一部占有し、大きく次の二つに分けられる。
静的ローカル変数は、宣言された関数が終了しても、メモリ上から消えることはない。
初期化されるタイミングはプログラムの開始時で、このとき、明示的に初期化しなくても、自動的に0に設定される。
また、この変数は宣言された関数内でのみ参照できる。
基本的な内容は、静的ローカル変数と同じ。但し、この変数は、同一ソースファイル内のみ参照できる。
この関数は、同一ソースファイル内のみ参照できる。
extern(外部変数)
外部変数は、関数外で定義され、どの関数からも参照できる。常にメモリの一部を占有し、その値を保持する。
変数定義が同じソースファイルにある場合。
変数定義が異なるソースファイルにある場合。
register(レジスタ変数)
基本的に、CPUにあるレジスタに変数の値を割り当てる。空いているレジスタがない場合、自動変数(auto)となる。
(レジスタはメモリよりも高速にアクセス可。)
使用頻度の高い変数に用いると処理速度の高速化が図れる。
但し、コンパイラの最適化により「register」を付けても必ずしも高速化になるとは限らないので、
レジスト変数も「auto」と同様あまり意味がない。尚、使用するには、以下の制限がある。
アドレスはメモリ上の番地であり、レジスタに番地はないので、そもそもアドレスが取得できない。
- グローバル変数や静的変数に registerを付けることはできまない。
レジスタの個数には制限があり、これらの変数はプログラム実行中、常に存在しなくてはならないため、レジスタが埋まってしまうので。
typedef
既存のデータ型に、別の型名を与える。
<書式>
typedef [既存のデータ型] [別の型名];
例)型
typedef unsigned int size_t; // stddef.h
例)構造体
typedef struct
{
int age;
char name[80];
}HUMAN;
HUMAN h;
例)関数
typedef int (*PFUNC) (int, char*);
PFUNC func;
typedef std::[[vector]]<int> VEC_INT;
enum型(列挙型)
enum 列挙型名 {列挙定数リスト} 変数リスト;
例1)
enum coltype {red, green, blue} color;
例2)
enum coltype {red, green, blue} color1, color2;
例3)
enum coltype {red, green, blue};
enum coltype color, work[10];
例4)
enum {red, green, blue} color;
上記いずれの場合も値は、
red = 0, green = 1, blue = 2
となる。
但し、下記のように宣言すると、
例5)
enum coltype {red, green = 5, blue} color;
red = 0, green = 5, blue = 6
となる。
参考
「#define」を使用するより、代わりに「const」「typedef」「enum」を使用した方がいい場合がある。
コメント
最終更新:2009年05月23日 18:08