【BUG】MinGW的一个bug,I think……
c语言吧
全部回复
仅看楼主
level 13
啊o额iu鱼
楼主
关于%lf的,
加上-std=c99后%lf无法输出double,输出是一堆0,
事实上它把%lf当成loun double了,实际上long double应该是%Lf……
2014年11月09日 06点11分
1
level 13
啊o额iu鱼
楼主
https://tieba.baidu.com/p/3399940461
2014年11月09日 06点11分
2
啊o额iu鱼
跳过3楼,看7楼图……
2014年11月09日 07点11分
level 13
啊o额iu鱼
楼主
#include <stdio.h>
int main ()
{
long double ld=5.7;
double d=5.6;
float f=5.5;
printf("%lf;%lf;%lf\n",ld,d,f);
return 0;
}
2014年11月09日 06点11分
3
啊o额iu鱼
不要管这个,看7楼的……
2014年11月09日 06点11分
level 13
啊o额iu鱼
楼主
I think这一定是个bug,so我该去哪里反馈bug?
2014年11月09日 06点11分
4
level 13
z什么什么k
Because MinGW relies on MSVCRT, it has many of the same limitations and quirks with compatibility as Visual Studio 6. You should assume that MinGW applications cannot rely on C99 behaviour, only on C89. ——
http://mingw.org/wiki/C99
2014年11月09日 06点11分
5
level 13
z什么什么k
大概是说mingw依赖VC的运行库,所以VC的printf没有实现某些功能,mingw也没办法……总而言之都是VC6的错
2014年11月09日 06点11分
6
啊o额iu鱼
2014年11月09日 06点11分
啊o额iu鱼
但是这里说的是加-std=c99后的问题,vc6根本不支持c99啊,
2014年11月09日 06点11分
啊o额iu鱼
好吧,其实我没看懂楼上那一段……
2014年11月09日 06点11分
z什么什么k
回复 啊o额iu鱼 :gcc没有自带C运行库,所以mingw用的是VC6的C运行库。正因为VC6不支持C99,所以mingw不能保证库函数的行为符合C99标准……
2014年11月09日 07点11分
level 13
啊o额iu鱼
楼主
2014年11月09日 06点11分
7
level 11
天猫__
printf的lf!!!
2014年11月09日 06点11分
8
天猫__
printf哪来的lf啊
2014年11月09日 06点11分
啊o额iu鱼
回复 天猫__ :你没学c99的吧,c99里规定的是%lf对应double,%f对应float,%Lf对应long double……
2014年11月09日 06点11分
天猫__
回复 啊o额iu鱼 :我学的就是C99,C99根本没有规定lf怎么处理,gcc会把lf当成Lf,printf没有使用显式的原型,所以编译器处理参数传递时会把float转换成double,所以printf没有必要在弄一个处理float
2014年11月09日 06点11分
啊o额iu鱼
你看过c99标准文档了没有?你用linux的gcc试过了没有?
2014年11月09日 06点11分
level 12
我是不是师兄
自己错了别怪编译器啊
别偷懒
一个变量占用一个printf
你同时写在一个printf 不同变量会相互影响
2014年11月09日 06点11分
9
啊o额iu鱼
不是那个问题,那个乱码是正常的,问题在后两次输出的0,我也觉得3楼代码不大好,在7楼改了,还用Linux的gcc对比了,
2014年11月09日 06点11分
level 13
致青春💌
输出那里%1f后面是逗号吧?你用了分号
2014年11月09日 06点11分
10
啊o额iu鱼
大学生不要乱说话,
2014年11月09日 06点11分
致青春💌
噢!用这个号也可以的!原谅我基础不深,不过我的电脑可以运行这个代码
2014年11月09日 07点11分
level 13
啊o额iu鱼
楼主
linux的gcc就没这问题,%lf%f都能输出double和float,不能输出long double,对应貌似只是我yy出来的,
2014年11月09日 07点11分
11
level 13
小_埃
在你怀疑编译器之前,先去读读C99的标准,然后再去读读编译器的Wiki(甚至FAQ),在你的这个情况下,还要顺便看看MinGW的Wiki,然后再说话……
2014年11月09日 13点11分
12
小_埃
哦,对了,别忘了最后再看看Bug track系统,没准早就有人比你先发现了呢
2014年11月09日 13点11分
啊o额iu鱼
回复 小_埃 :看英文耐心不够,你都看下来了?
2014年11月09日 13点11分
小_埃
回复 啊o额iu鱼 :
我在英国
2014年11月09日 13点11分
啊o额iu鱼
2014年11月09日 13点11分
level 16
Sunchy321
我也想知道-std=c99是如何让编译器找到
正确的
库的。。
2014年11月09日 13点11分
13
1