В следующем коде С++:
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: error: invalid conversion from ‘int’ to ‘Test’ > test.cpp:15:14: error: initializing argument 1 of ‘int foo(Test)’
потому что 12354 не является допустимым значением test
(хотя оно действительно было бы справедливым в простой C, но оно не в С++).
Вы можете явно указать произвольную целочисленную константу в тип перечисления, но разве это не считается Undefined Поведение?