
1、ANSI C99标准中并没有64位整数类型。但是,许多实际的编译器,都实现了对64位整数类型的支持。因为没有这方面的标准,所以具体的语法描述方式略有不同,一般Windows平台,用__int64的关键字,而Linux平台则使用long long的描述方法。
2、有人做了测试,如下图所示:
综合上图可以得出如下几点:
a:long long定义方式可以用于gcc/g++,不受平台限制,但不能用于VC6.0。
b:__int64是Win32平台编译器64位长整型的定义方式,不能用于Linux。
c:“%lld”用于Linux i386平台编译器,”%I64d”用于Win32平台编译器。
d:cout只能用于C++编译,在VC6.0中,cout不支持64位长整型。
3、如果要使用64位的整数,尽量使用最新的编译器,Windows平台,尽量使用VS的较新版本,Linux平台,建议将gcc/g++升级到最新版本。
1。看了下代码,你说的那个va_arg(args,unsigned long long)是不是这个:在lib_generic/vsprintf.c中的:int vsprintf(char *buf, const char *fmt, va_list args){..#ifdef CONFIG_SYS_64BIT_VSPRINTF if (qualifier == 'q') /* "quad" for 64 bit variables */ num = va_arg(args, unsigned long long)else#endif...}是的话,那你应已经加了对应的宏,去启动64位的支持了吧?我的是在头文件中加了:#define CONFIG_SYS_64BIT_VSPRINTF 1#define CONFIG_SYS_64BIT_STRTOUL 1其中CONFIG_SYS_64BIT_STRTOUL对应着cmd_nand.c中,很多输入的字符串变量,转换成64位的数值要用到lib_generic/vsprintf.c中的simple_strtoull2。关于编译器的版本,我的是用buildroot v2009.08编译的gcc 4.2.4版本的arm-linux-gcc配置里面,加了大文件支持: [ * ] Enable large file (files >2 GB) support? 不知道这个参数是否对编译出来的,是否支持64位的打印的那些函数有影响。如果有,那你的编译时候,也要加上。3。另外,我用的OABI,如果你用的是EABI,不知道是否有可能是EABI的兼容性不够好?(个人感觉,这个可能性极小。。。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)