ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: C++ ユーザーズガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
4.9 静的名前空間スコープ関数のクラスフレンドとしての宣言
4.10 事前定義済み __func__ シンボルの関数名としての使用
-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 ビットアーキテクチャーでは、enum は int よりも大きなサイズが必要となる場合があります。その場合に、前方宣言と定義が同じコンパイルの中で見つかると、コンパイラエラーが発生します。実際のサイズが想定されたサイズと異なっていて、コンパイラがそのことを検出できない場合は、コードのコンパイルとリンクは行われますが、実際のプログラムが正しく動作する保証はありません。8 バイト値が 4 バイト変数に格納される場合は特に、予期しないプログラムの動作が発生する可能性があります。