原创 如何解决KEILARM中的(1<<31)编译警告问题

2007-3-11 08:34 10240 6 6 分类: MCU/ 嵌入式






如何解决KEILARM中的(1<<31)编译警告问题
雁塔菜农 发表于 2006-12-26 0:28:00


在KeilARM的LPCARM,存在(1<<31)编译警告问题

main.c(174): warning:  #61-D: integer operation result is out of range
main.c(174): warning:  #68-D: integer conversion resulted in a change of sign

 

由于编译器默认signed int即32位有符号整数类型,而1<<31实际为0x80000000,

这样就有可能改写了符号位(最高位)

 

依此类推,(2<<30),(3<<29)...等都会出现编译警告问题.

 

解决办法为: ((unsigned int)1<<31),((unsigned int)2<<30),...

 

所以,在LPC213xdef.h中就有如下的定义:


#define __0                  (LPC_REG)0
#define __1                  (LPC_REG)1
#define __2                  (LPC_REG)2
#define __3                  (LPC_REG)3
#define __4                  (LPC_REG)4
#define __5                  (LPC_REG)5
#define __6                  (LPC_REG)6
#define __7                  (LPC_REG)7
#define __8                  (LPC_REG)8
#define __9                  (LPC_REG)9
#define __10                 (LPC_REG)10
#define __11                 (LPC_REG)11
#define __12                 (LPC_REG)12
#define __13                 (LPC_REG)13
#define __14                 (LPC_REG)14
#define __15                 (LPC_REG)15
#define __16                 (LPC_REG)16
#define __17                 (LPC_REG)17
#define __18                 (LPC_REG)18
#define __19                 (LPC_REG)19
#define __20                 (LPC_REG)20
#define __21                 (LPC_REG)21
#define __22                 (LPC_REG)22
#define __23                 (LPC_REG)23
#define __24                 (LPC_REG)24
#define __25                 (LPC_REG)25
#define __26                 (LPC_REG)26
#define __27                 (LPC_REG)27
#define __28                 (LPC_REG)28
#define __29                 (LPC_REG)29
#define __30                 (LPC_REG)30
#define __31                 (LPC_REG)31

这样可以用(__1 << 31),(__2 << 30),...解决此类编译警告问题.

 

这就是LPC213xdef.h搞如此倒塌的问题了~~~
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条