定数と変数の使い方


【定数の記述方法】

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
ram
any その変数をプログラムメモリ領域(rom)か、データメモリ領域(ram)
に置くことを指定

(3) 変数の値の範囲
  上記基本型と修飾子を組み合わせた変数の型の種類と格納メモリサイズ、および
  各変数の取りうる値の範囲は下記となります。
ビット幅 取りうる値の範囲
void なし なし
char -128〜127
unsigned char 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


   目次ページへ