2016.10.16
今天的代码被警告说:left shift count >= width of type
代码:
typedef enum
{
MSG_WARNING_DELAYED = (1 << 30),
MSG_WARNING_LOCKED = (1 << 31)
}MSG_EVENT_TASK_WARNING;
平台:
AVR-GCC/Atmega16。
搜索了下、最终确定是移位的范围超过变量宽度(寄存器宽度)。
上面代码里面的1、在AVR-GCC/Atmega16下默认为8bit宽度,被放在8bit寄存器里面。
而(1 << 30)中左移了30位、已经超出了8bit宽度范围,8bit寄存器里面的所有bit都将被移出寄存器,结果将全是0。
所以这里需要指定(1 << 30)中1的宽度为32位、才能进行32位以内的移位操作,如下指定:
typedef enum