C语言中,如果函数直接使用枚举类型作为入参,会带来风险,如果外部随意传入 一个大于枚举类型的值,会被强制转换成枚举类型的合法值。也就是说,会强制将数据截断成枚举类型的范围内的值。所以最好是通过typedef将枚举类型定义为UINT32,这样在函数做入参检查时,可以校验枚举值的合法性。
typedef unsigned int EXAMPLE_EMUM_UINT32;
C++不存在该问题,编译器会告警。
本文探讨了C语言中直接使用枚举类型作为函数参数的风险,即外部输入可能被强制转换为枚举的有效值,导致数据截断。推荐通过typedef定义枚举类型为UINT32以增强参数检查。
C语言中,如果函数直接使用枚举类型作为入参,会带来风险,如果外部随意传入 一个大于枚举类型的值,会被强制转换成枚举类型的合法值。也就是说,会强制将数据截断成枚举类型的范围内的值。所以最好是通过typedef将枚举类型定义为UINT32,这样在函数做入参检查时,可以校验枚举值的合法性。
typedef unsigned int EXAMPLE_EMUM_UINT32;
C++不存在该问题,编译器会告警。
3万+
1万+

被折叠的 条评论
为什么被折叠?