Oracle® Solaris Studio 12.4: C++ ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

4.4 enum の型と変数の前方宣言の実行

-features=extensions オプションを使用すると、コンパイラにより enum の型と変数の前方宣言が認められます。さらに、不完全な enum 型による変数宣言も認められます。不完全な enum 型は、現行のプラットフォームの int 型と同じサイズと範囲を持つと想定されます。

次の 2 つの行は、-features=extensions オプションを使用した場合にコンパイルされる不正なコードの例です。

enum E; // invalid: forward declaration of enum not allowed
E e;    // invalid: type E is incomplete

enum 定義では、ほかの enum 定義を参照できず、ほかの型の相互参照もできないため、列挙型の前方宣言は必要ありません。コードを有効なものにするには、enum を使用する前に、その定義を完全なものにしておきます。


注 -  64 ビットアーキテクチャーでは、enumint よりも大きなサイズが必要となる場合があります。その場合に、前方宣言と定義が同じコンパイルの中で見つかると、コンパイラエラーが発生します。実際のサイズが想定されたサイズと異なっていて、コンパイラがそのことを検出できない場合は、コードのコンパイルとリンクは行われますが、実際のプログラムが正しく動作する保証はありません。8 バイト値が 4 バイト変数に格納される場合は特に、予期しないプログラムの動作が発生する可能性があります。

注 -  C++11 では、追加構文による enum 型の前方宣言を実行できます。