为什么 %lf 不能在 printf 中使用双打但 %f 可以?

Why doesn't %lf work with doubles in printf but %f does?

当我编译 运行 下面的代码片段时,输出是 0.000000。

#include <stdio.h>

int main(void)
{
    double a = 1.4;

    printf("%lf", a);

    return 0;
}

当我编译 运行 这段代码时,输​​出为 1.400000,正如我预期的那样是第一个代码段。

#include <stdio.h>

int main(void)
{
    double a = 1.4;

    printf("%f", a);

    return 0;
}

为什么会这样? %lf 是双打的格式说明符,所以第一个片段不应该与第二个片段具有相同的输出吗?

有人问了类似的问题 (Correct format specifier for double in printf),但根据最上面的答案,这两个片段应该产生与 "the l is specified as having no effect if followed by the f conversion specifier (among others)" 相同的输出(引用自第一个答案)。

我将代码块用作 IDE 并且我使 gcc 编译器遵循 1999 年的 C 标准。 可能的重复说明我的代码应该可以工作根据我的编译器遵循的 C99 标准,但我的代码不起作用。因此,重复的答案不能解决我的问题。

引用 C11,第 §7.21.6.1 章/第 7 段(强调我的)[和第 §7.19.6.1 章,C99,如果您有兴趣]

The length modifiers and their meanings are:

[.....]

l (ell)

Specifies that a following d, i, o, u, x, or X conversion specifier applies to a long int or unsigned long int argument; that a following n conversion specifier applies to a pointer to a long int argument; that a following c conversion specifier applies to a wint_t argument; that a following s conversion specifier applies to a pointer to a wchar_t argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion specifier.

如果你的编译器不遵守这一点,那就是编译器一致性问题。

您的代码很好,两个代码段完全相同。

See live here