C支持长双浮?

时间:2016-03-06 18:31:43

标签: c

以下代码段的输出为0.000000。请告诉我原因。

#include <stdio.h>

main()
{
printf("%f\n",123.456789l);
}

我在Linux中使用GCC 4.9(Debian 8.3)。

1 个答案:

答案 0 :(得分:2)

printf的%f格式需要一个简单的双倍。对于长双倍,您需要%Lf。 (那是大写字母L.)

很难确切地说为什么你得到了0.000,但是当你将一种类型(long double)传递给期望别的东西(%f,普通的双倍)的格式说明符时,你几乎永远不会得到你想要的东西。

这是新编译器真正有用的一件事。当我尝试你的代码时,我的gcc(4.6.3)副本和你的一样沉默,但clang说“警告:格式指定类型'double'但是参数类型为'long double'”,我很确定更新版本的gcc也会抱怨。