C语言关于long double在Windows下输出错误的问题
最近在学习《C primer plus》这本书,其中一段代码在windows下用vscode+MinGW编译执行出错,代码如下:
#include <stdio.h>
int main(void)
{
float aboat = 32000.0;
double abet = 2.14e9;
long double dip = 5.32e-5;
printf("%f can be written %e\n", aboat, aboat);
printf("And it's %a in hexadecimal, powers of 2 notation\n", aboat);
printf("%f can be written %e\n", abet, abet);
printf("%Lf can be written %Le\n", dip, dip);
return 0;
}
在windows下使用MinGW编译运行,此行代码输出并非dip数值。调试运行时,数值确实被赋给dip。随即在Linux环境编译运行此段代码,结果正确。
搜索查询得知:Windows环境下,如果使用的是MinGW,则问题在于默认情况下,MinGW使用I / O响应。Microsoft C运行时提供的格式化功能,该功能不支持80位浮点数(在Microsoft land中为long double== double)。
但是,MinGW还附带了一组替代实现,它们确实支持长双打。要使用它们,请在函数名称前加上__mingw_(例如__mingw_printf)。根据项目的性质,您可能还想全局#define printf __mingw_printf或使用-D__USE_MINGW_ANSI_STDIO(这将启用所有printf-family函数的MinGW版本)。
注:来自printf和long double中潇潇雨雨的回答。
经验证,代码换成
__mingw_printf("%Lf can be written %Le\n", dip, dip);
结果准确无误。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)