Renesas Synergy™

FAQ 3000290 : enum列挙体の初期値について(CC-RX)

Q: 質問

RXコンパイラCC-RXを使用しています。
他社製マイコンからの移植対応のため、なるべくソースコードを修正したくないのですが、
enum列挙体の初期値についてCC-RXコンパイラを用いて
typedef enum {E0, E1, E2,} Enum_t;
Enum_t en;
とした時、en.E0は0が約束されるのでしょうか?
それとも0にしたい場合は明示的にtypedef enum {E0 = 0, E1, E2,} Enum_t;としたほうが良いのでしょうか?


A: 回答

enum列挙体の初期値について以下の2点をそれぞれ別々に考慮する必要があります。
(1) enum 宣言の先頭項目(E0)のデフォルト値
(2) enum型を持つ変数の初期値

(1) enum 宣言の先頭項目(E0)のデフォルト値
enum型を宣言した際の先頭項目は、値を明示的に指定しなければ 0 になります。

(2) enum型を持つ変数の初期値
enum型だからと言って、変数の初期値にenum先頭項目の値が自動的に入る訳ではありません。
変数に初期値が入っている事を期待するのであれば、変数宣言時に初期値(E0や0など)を指定する必要があります。

スタートアップコードが変数の配置されるメモリ領域全体を0クリアしていれば外部変数やstatic変数の初期値が全て0になりますが、これはenum型の先頭項目の値が0であることとは関係ありません。

適用製品

RXファミリ用C/C++コンパイラパッケージ
他にご質問がございましたら、リクエストを送信してください