【定数の記述方法】
1.数値定数の扱い
数値定数は下記のフォーマットで記述します。デフォルトは10進数となっています。
数値表現 記述方法 例 10進数 数値のみ 15, 1320 16進数 0x を付加 0x3E, 0xFF32, 0x0c 8進数 0 を付加 03756, 014 2進数 0b を付加 0b10001100、 0b1100
2.文字の扱い
1文字のデータはシングルクオーテーションで挟んで記述します。
'a' 'q' '\n' '\0'
文字列定数はダブルクオーテーションで挟んで記述します。
中味の文字列は0個でも構いません。
"Hello!" ""
3.ANSI Cのエスケープ文字
下記の文字は特殊制御用の文字としてエスケープ文字として定義されており、
1文字データとして扱われます。この中で逆スラッシュは¥マークで入力します。
エスケープ文字
記述方法意味内容 16進数 \a Bell(ベルを鳴らす) 07 \b BackSpace(1文字戻る) 08 \f Form Feed(左端へ移動) 0C \n New Line(改行) 0A \r Carriage Return(復帰) 0D \t Horizontal Tab(水平タブ) 09 \v Vertical Tab(垂直タブ) 0B \\ BackSlash(¥自身) 5C \? Qustion Mark(?自身) 3F \' Single Quote(’自身) 27 \" Double Quote(”自身) 22 \0XX 8進数XX \xXX 16進数
【変数の記述方法】
(1) 基本データ型
基本データ型には下表のような種類があります。これにさらに修飾が付加
されて変数の型として使われます。
種類指定 意味内容 備考 void 型なし char 1文字 int 整数 float 浮動小数点数 double 浮動小数点数
(2) 変数型の修飾
上記の基本の型に対し、それぞれに下記のような修飾ができます。
修飾子 対象基本型 意味内容 auto any 実行中のブロック内でのみ存在するローカル変数とする const any 変更されない定数であることを指定する far any 別バンクにある変数であることを指定する extern any 外部定義変数であることを指定する long int 倍精度整数変数であることを指定(整数変数にのみ適用) near any データメモリの時はアクセスバンクにあることを示し
プログラムメモリの時は64kB以内であることを示すregister any 何の影響もない short int short整数変数であることを指定(整数変数にのみ適用) signed chra
int
long符号付変数であることを指定 static any 関数の外にあるときは、現在ファイル中でのみ有効であることを示し
関数内にあるときは、その関数内でのみ有効であることを示すunsigned char
int
long符号なし変数であることを指定 rom
ramany その変数をプログラムメモリ領域(rom)か、データメモリ領域(ram)
に置くことを指定
(3) 変数の値の範囲
上記基本型と修飾子を組み合わせた変数の型の種類と格納メモリサイズ、および
各変数の取りうる値の範囲は下記となります。
型 ビット幅 取りうる値の範囲 void なし なし char 8 -128〜127 unsigned char 8 0〜255 int 16 -32,768〜32,767 unsigned int 16 0〜65,535 short 16 -32,768〜32,767 unsigned short 16 0〜65,535 short long 24 -8,388,608〜8,388,607 unsigned short long 24 0〜16,777,215 long 32 -2,147,483,648〜2,147,483,647 unsigned long 32 0〜4,294,967,295 float 32 1.7549435E-38〜6.80564693E+38 double 32 1.7549435E-38〜6.80564693E+38
【変数の外部宣言方法】
extern
static
staticが関数内部で使われた時には、関数内のローカル変数にはならず、
そのプログラムファイル内ではグローバル変数として扱われ値は保持されます。
staticが全ての関数の外で最初に宣言されたときには、グローバル変数として
扱われます。またこの場合にはstaticが明記されていなくともデフォルトで
static宣言したことになります。
このどちらの場合にも、別のファイルで、extern宣言されて外部変数として扱わ
れたファイル間でのみ値を保持します。
externは、指定変数が自分のプログラムファイル内には無く、他のプログラム内
にあることを宣言します。そしてこれらの複数のプログラムをリンクするとき初めて
変数の実在の在り処が定義されます。
staticでグローバル変数宣言された変数は、externで他のプログラムから指定して
外部変数として使うことが出来ます。
《例1》
ファイル1
static unsigned char a; //aはグローバル変数宣言
unsigned char b; //デフォルトでstatic宣言される
void main(void)
{
a = 1;
b = 2;
a = new_function();
return;
}
ファイル2
extern int b;
int new_function();
{
int c;
c = b; //外部宣言されているのでOK
return a; //この行は未定義エラーとなる
}
《例2》
unsigend char hello(void)
{
static unsigned char i = 0;
i++;
return i;
}
void main(void)
{
unsigned char count;
for ( count = 0; count < 10; count++ )
{
unsigned char a;
a = hello();
}
}
この例2では、hello関数が呼ばれる度にiが+1されます。そしてiは
グローバル変数なので、その値を保持したままとなるため、helloが
10回呼ばれれば、iは10となります。
【volatile変数宣言】
volatile
volatile変数とは、プログラム以外で変数の内容が書き換えられる変数を意味します。
この代表的な例は、入力ピンや内蔵タイマのレジスタを変数とした時です。
このよううな変数はvolatie宣言をして、コンパイラの最適化の対象にはならないように
する必要があります。
《例》
unsigned chra x, y;
volatile unsigned char TMR0;
x = 0x55;
y = x;
TMR0 = 0x00;
y = TMR0;
上記でvolatile宣言をしておかないと、コンパイラの最適化実行で、x用の
一時メモリアドレスが、TMR0に割り当てられてしまう。
【連続データ】(Enumeration)
enum
enumerationは連続する整数定数を定義するために使います。
書式は下記となっています。
enum identifier
enum identifier { enumarationlist }
enum { enumarationlist }
enumarationlistは下記書式
identifier, identifier, identifier = constant
実際の使い方は下記の例のようにします。
《例1》
enum tag_1 { VALUE_1, VALUE_2, VALUE_3 } enum_1;
例1では、tag_1とenum_1という連続データリストを定義して、さらにtag_1は
3個の連続データであることを定義しています。
そして3個の連続データの最初は0なので、VALUE_1は0、VALUE_2は1、
VALUE_3は2という連続データとなります。
《例2》
enum tag_2 { VALUE_3, VALUE_4, VALUE_5 } enum_2;
enum tag_3 { VALUE_6=2, VALUE_7, VALUE_8=50, VALUE_9 } enum_3;
例2では、tag_2、tag_3、enum_2、enum_3 という4つの連続データリストを定義
しようとしています。しかし、VALUE_3はすでに例1で定義すみであるため
コンパイルエラーとなります。
tag_3では4個の要素を定義していますが、初期値が定義されているため、
それぞれの値は下記となります。
VALUE_6は2 VALUE_7は3 VALUE_8は50 VALUE_9は51