В следующем коде 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
выдается предупреждение, в котором говорится, что управление достигло конца непустой функции. Почему?
В целом неверно говорить, что переменная 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 , но не в C ++).
Вы, конечно, можете явно привести произвольную целочисленную константу к типу перечисления, но разве это не считается неопределенным поведением?