warning: integer constant is too large for "long" type


//在64位平台上通常默认int为32bit,也就是说你声明一个常量如果不加任何修饰,默认就是int类型的32bit,
//一旦常量定义超出了这个32bit,编译时如果规则限制比较严格(例如:-Werror) 就会报错: 

//@Makefile
//CFLAGS= -Wall -Werror -march=i486 -m32 -O2 -fomit-frame-pointer -fno-builtin -ffreestanding -fPIC

//@xxx.h
#define BAD_ADDR_8        ((0x700000000+0x7ffffffff)>>1)

//@xxx.c
func(BAD_ADDR8,...);

//编译之后就会报错如下:
warning: integer constant is too large for "long" type


//避免出现此类错误的方法是,一旦常量字长超出32bit,则在常量末尾加上ULL等标识符,以表示该常量不是int类型,
//而是unsigned long long等字长大于32bit的类型

//@xxx.h
#define BAD_ADDR_8        ((0x700000000ULL+0x7ffffffffULL)>>1)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值