今回こそは簡単なやつ。列挙型には内部表現を指定することができます。A;メモリ上ではこの内部表現で格納されます。値キャストするか、メモリ操作でアクセスするかしかありませんでした。属性で取り出せる値は内部表現に影響されず常に連番です。(X);メモリ操作でアクセスする方法は多岐に渡りますので省略。効率はキャストの方が良いはずです。それで、キャストするにしろメモリアクセスするにしろ、変数のサイズを一致させないといけないわけです。属性は動的な値扱いになってしまいますから上の例のようにそのまま使うことができません。Randy先生のJanus/Adaはそのようです。回避策としてはまあこんな感じでして......。8,16,...ビットであること前提で、9ビットとか寄越されるとどうしようもありませんでした。規格上の扱いは動的でも実際には静的に決まりますので最適化されるはずです。属性が追認されています。それぞれ列挙型から内部表現へ、内部表現から列挙型への変換です。value使ってはいけない列挙型の使い方¶これで済ませたかったのですけれども、ちょっと余計なことを書かせてください。巷のコードを漁っていますと、どうにも良くない列挙型の使い方が散見されます。この拡張によって良くない使い方に拍車がかかるといけませんので、NG集を書かせてください。してサポートされている使い方なので性質が悪いです。いいますのは、列挙型に範囲外の値が入ることは想定されていないからです。コンパイラは列挙型の値が列挙された値の何れかであることを利用した最適化を行いますので大変危険です。GNATでは実行時にチェックを行うこともできます。オプションを付けてお試しください。behavior、という実例があります。(C言語の仕様では代入で入れる分にはセーフです。C;C言語のライブラリをインポートしているとありがちです。追加されたときにAda側を追従、再コンパイルできなければ上と同じ状況になります。なくてもC言語のライブラリなんてエラーコードを返すはずの関数がマイナス値に特殊な意味を持たせてきたり等も平気でしてきますので、素直に列挙型を対応させますと碌な事になりません。C;こうした方が無難です。30));有効な値の間であっても範囲外です。領域を予約したことにはなりません。これもC言語や、同じPascal系でもDelphiでは有効な使い方なので性質が悪いです。他の名前の方が良かったのでは、と思わなくもないです。一瞬提案されましたが流されてしまいました。