好像有些不支持lld,所以才需要PRId64此类的宏
long long 和 inttypes.h 都是 C99 里面的;怎么会只支持一个。 回复 1# 18345093167
这种写法
long long int a = 1,b =2,c= 3;
printf("%d %d %d\n",a,b,c);
的行为未定义。正确的写法(之一)是:
long long int a = 1,b =2,c= 3;
printf("%lld %lld %lld\n",a,b,c); MMMIX 发表于 2016-08-16 20:48 static/image/common/back.gif
long long 和 inttypes.h 都是 C99 里面的;怎么会只支持一个。
有可能对方用的MinGW,而且用了windows的crt库,那个库不认识%lld这种格式
一个解决方法是,在#include <stdio.h>之前,加上一句 #define __USE_MINGW_ANSI_STDIO 1 hellioncu 发表于 2016-08-16 16:50 static/image/common/back.gif
好像有些不支持lld,所以才需要PRId64此类的宏
window就不支持%lld,也不支持PRId64。 yulihua49 发表于 2016-08-17 10:44 static/image/common/back.gif
window就不支持%lld,也不支持PRId64。
应该是从VS2012开始就支持了。
只是支持lld,没有宏还要早 茴香豆的茴字有四种写法你们知道吗? printf某个整数,本质上是传的地址,然后根据%d确定取值大小。(C程序语言(k&r版本上有专门的自己实现的printf))
所以,%d取的是4个字节(你的代码是取连续的12个字节);而a,b,c有8个字节。所以,理论上来说,输出的是a的8字节和b的4个字节(小端的)。
printf的64位整数输出,在windows下用的是%lld,linux用的是%ld,所以才有上面那位仁兄说的,"%"PRI64这种格式,就是为了跨平台。
页:
1
[2]