C言語の定数を区別する方法
C言語で使える定数は、以下の種類に分けられます
- 数値リテラル:10進数、8進数、16進数で表され、符号を付けられます。例:123、-456、0x1A、077
- 浮動小数点数は、整数部、小数部、指数部の3つの部分からなり、正負の符号を持つことができます。例:3.14、-0.123、1.23E-4
- 文字定数: 一つの文字を単一引用符で囲ったもの。例: ‘a’, ‘1’, ‘+’。
- 文字定数:二重引用符で囲まれた文字列である。例えば:”Hello”, ”123”, ”C言語”。
- 列挙定数: 列挙型に定数を定義します。例えば: enum Color { RED, GREEN, BLUE }; で RED, GREEN, BLUE です。
- 定数:#defineプリプロセッサで定義された定数。例:#define PI 3.14
定数の妥当性を判断するには、以下のルールに従うことができます。
- 整定数定数は真の整数を表すものであり、表される整定数の範囲に収まっていなければなりません。
- 浮動小数点定数は、小数点表記に従っており、その浮動小数点数型の範囲内である必要があります。
- 文字定数は1文字しか持てず、シングルクォーテーションで囲まなければいけません。
- 文字列定数はたくさんの文字を含んでいて、 二重引用符で括られている必要があります。
- 列挙定数は列挙型の定義済みの定数でなければなりません。
- プリプロセス段階でシンボル定数が対応する値に置換されるため、合法性の問題はありません。
留意すべきは、定数の正当性の判断はコンパイル時に行われるため、定数がランタイムにこそ初めて動的に決定されるのであれば、コンパイル時には判断することはできないことである。