MMMIX 发表于 2016-08-16 20:48

hellioncu 发表于 2016-08-16 16:50 static/image/common/back.gif
好像有些不支持lld,所以才需要PRId64此类的宏

long long 和 inttypes.h 都是 C99 里面的;怎么会只支持一个。

MMMIX 发表于 2016-08-16 21:06

回复 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);

bruceteen 发表于 2016-08-17 08:20

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

yulihua49 发表于 2016-08-17 10:44

hellioncu 发表于 2016-08-16 16:50 static/image/common/back.gif
好像有些不支持lld,所以才需要PRId64此类的宏
window就不支持%lld,也不支持PRId64。

hellioncu 发表于 2016-08-17 11:03

yulihua49 发表于 2016-08-17 10:44 static/image/common/back.gif
window就不支持%lld,也不支持PRId64。

应该是从VS2012开始就支持了。
只是支持lld,没有宏还要早

bskay 发表于 2016-09-23 10:53

茴香豆的茴字有四种写法你们知道吗?

knull 发表于 2016-09-30 13:41

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]
查看完整版本: 奇葩的输出