问题描述
- 在面试中遇到一个枚举类型相关问题
- 今天在面试中遇到的问题,不知道如何解决
enum ADC__enlSRState{
ADC__nReset
ADC__nActive
ADC__nGetMux2
ADC__nGetMux3
ADC__nGetFuel
ADC__nGetTwoPinSensors
ADC__nlastState = ADC__nGetTwoPinSensors
}在这里ADC__nlastState起到了什么作用?
解决方案
应该是用在判断一个数值e是否是有效的枚举值的时候,用e<=ADC__nlastState
而不是e<=ADC__nGetTwoPinSensors
;假如以后再添加一个 ADC__nGetThreePinSensors
的时候,只要改ADC__nlastState
的定义而不用改判断语句了。
编程小技巧。
解决方案二:
就是给ADC__nlastState指定了一个值,枚举中可以不指定值,有系统自动安排,当然你可以指定一个值,那么他后面的会挨着你设置的值继续
解决方案三:
从字面上理解,ADC__nlastState表示最后的状态,ADC__nlastState = ADC__nGetTwoPinSensors表示两者相等,相当于它们互为对方的别名具体为什么如此,要看你的业务,这应该是一个模数转换的设备。但是枚举使用别名这很常见,有时候为了向前兼容,有时候为了方便理解比如windows api中的messagebox函数MB_ICONHAND MB_ICONSTOP or MB_ICONERROR,它们都表示那个错误的图标。这是因为在windows 3.x下,其实还有一个stop的图标(类似道路上的stop标志牌,在美国很常见,中国不多),但是在现在的windows下已经废弃了,为了代码兼容性,它被重新映射到error图标上再比如设置windows窗体风格的WS_EX_OVERLAPPEDWINDOW,它其实代表(WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE),这就是为了方便记忆。
时间: 2024-10-07 01:18:56