C中的枚举不会在无效输入上引发错误
我正在使用
gcc,我编译了这段代码,它应该抛出一个错误,但它运行成功.
enum DIRECTION {EAST,WEST,NORTH,SOUTH}; int main(void) { enum DIRECTION currentDirection = 10; printf("%dn",currentDirection); return 0; } 输出: 解决方法
枚举类型在
C99 draft standard部分中定义6.7.2.2枚举说明符为:
脚注110说:
该标准并未说明您不允许指定枚举声明中指定值之外的值,尽管在附录I中的常见警告中它确实提出了这样的警告,但并不要求:
gcc不会产生警告,虽然使用-Wassign-enum标志或-Weverything标志,但它看起来与此类似:
并且您可以使用-Werror使其成为错误. 基思提出了两个有趣的观察: >使用-Werror会使clang不符合,因为代码有效C.> enum DIRECTION currentDirection = 128;具有实现定义的行为,因为类型很可能是char. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |