3 回答
TA贡献1841条经验 获得超3个赞
除了错误的修饰符之外,gcc的哪个端口可以连接到Windows?mingw使用Microsoft C库,并且我似乎还记得该库不支持80位长的double(出于各种原因,Microsoft C编译器使用64位长的double)。
TA贡献1893条经验 获得超10个赞
从printf联机帮助页:
l(ell)后续的整数转换对应于long int或unsigned long int参数,或者后续的n转换对应于long int参数的指针,或者后续的c转换对应于wint_t参数,或后续的s转换对应于wchar_t参数的指针。
和
遵循a,A,e,E,f,F,g或G转换的LA对应于长double自变量。(C99允许%LF,但SUSv2不允许。)
所以,你想要%Le,不是%le
编辑:一些进一步的调查似乎表明Mingw使用MSVC / win32运行时(用于诸如printf之类的东西)-将long double映射为double。因此,将提供本机long double的编译器(如gcc)与运行时混合在一起似乎并没有什么问题。
TA贡献1833条经验 获得超4个赞
如果使用的是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版本)。
- 3 回答
- 0 关注
- 1073 浏览
添加回答
举报