gpt4 book ai didi

c - 如何检测 printf 是否支持 %a?

转载 作者:行者123 更新时间:2023-12-03 21:33:50 38 4
gpt4 key购买 nike

我需要无损地表示字符串中的 double float ,因此我使用

sprintf(buf, "%la", x);

这在我的系统上运行良好,但是当在 Windows 下的 MinGW 上构建时,会发出警告:

unknown conversion type character 'a' in format

我为这种情况编写了一个解决方法,但无法检测何时应该使用该解决方法 - 我尝试过#if __STDC_VERSION__ >= 199901L,但似乎 Gcc/MinGW 定义了即使它不支持%a。还有其他宏我可以检查吗?

最佳答案

这并没有回答“如何检测 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 都是相同的,可以用来打印 floatdouble 参数。

如果您想打印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 相同,但精度更高,并且二进制小数点的位置不同,它也是正确的。

关于c - 如何检测 printf 是否支持 %a?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39112759/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com