今天在面试中遇到的问题,不知道如何解决
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),这就是为了方便记忆。