//在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)
warning: integer constant is too large for "long" type
最新推荐文章于 2021-10-14 00:03:35 发布