这并不回答“如何检测printf是否支持%a?”这个问题。在一般情况下,但您可以修改您的编译器安装,以便支持%a
。
首先,使用mingw-w64。这是MinGW的最新分支。 MinGW的原始版本没有得到很好的维护,并没有修复你遇到的错误(更喜欢责怪微软等)。
在Windows 10使用的MinGW-W64 4.9.2,下面的代码工作对我来说:
#include <stdio.h>
int main()
{
double x = 3.14;
printf("%a\n", x);
}
生产0x1.91eb85p+1
这是正确的。这仍然推迟到Microsoft运行时。
你的问题中提到%la
,但是%a
和%la
都是相同的,可用于打印无论是float
或double
说法。
如果您想打印long double
,那么Microsoft运行时不支持该操作; gcc和MS使用不同尺寸的long double
。你必须使用的MinGW-W64自己的printf实现:
#define __USE_MINGW_ANSI_STDIO 1
#include <stdio.h>
int main()
{
long double x = 3.14;
printf("%La\n", x);
}
其输出0xc.8f5c28f5c28f8p-2
。这实际上是与0x1.91eb85p+1
相同的数字,具有更高的精度和不同的二进制点位置,这也是正确的。
看看标准怎么样? http://port70.net/~nsz/c/c11/n1570.html#7.21.6.1?如果您的环境不支持此操作,则不符合规定。 – Olaf
版本信息的'-v'报告是什么? – jxh
我没有可轻松访问的编译器环境 - 我从包构建服务获取日志。 – crowding