在以下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编译时发出警告,表示控制到达无效函数的结尾.为什么?
编辑
它通常不正确地说,示例中的变量测试可以包含任何值.
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不是有效的测试值(虽然它确实在纯C中有效,但不在C).
你确定可以明确地将一个任意的整数常量转换为枚举类型,但不是这个未定义的行为?