次の C++ コードでは:
typedef enum { a, b, c } Test;
int foo(Test test) {
switch (test) {
case a: return 0;
case b: return 1;
case c: return 0;
}
}
-Wall
でコンパイルすると、制御が非 void 関数の終わりに達したという警告が表示されます。なんで?
編集
test
この例の変数に任意の値を含めることができると言うのは、一般的に正しくありません。
foo(12354)
コンパイルしません:
> test.cpp:15:14: エラー: 'int' から 'Test' への無効な変換 > test.cpp:15:14: エラー: 'int foo(Test)' の引数 1 を初期化しています
12354 は有効なTest
値ではないためです (実際にはプレーンCでは有効ですが、C++ では有効ではありません)。
任意の整数定数を列挙型に明示的にキャストできますが、それは未定義の動作と見なされませんか?