如何强制 printf 在 Windows 上输出 [-]inf 或 [-]infinity?

How to force printf to output [-]inf or [-]infinity on Windows?

C99 标准说:

A double argument representing an infinity is converted in one of the styles [-]inf or [-]infinity -- which style is implemented is implementation-defined. (p.278 section 7.19.6.1)

不幸的是Windows:

printf("%f\n", 1.0f/0.0f)

产生:1.#INF00

这是一个问题,因为一些应用程序希望输入符合 C 标准的字符串(C# 的 Double.Parse 适用于 "Infinity" 但不适用于“1.#INF00”,奇怪的是 "infinity"至少当我用 Mono 尝试时也不行。

我的问题是如何在 Windows 下强制 printf 输出 "inf" 或 "infinity" 而不是 1.#INF00 ?

(我正在用 MinGW gcc 4.8.2 编译)

您可以在 MSVC(默认)和 mingw 版本的 printf 函数之间进行选择。 只需像这样定义 __USE_MINGW_ANSI_STDIO,输出应该符合 C99:

#define __USE_MINGW_ANSI_STDIO 1

一些文档here and here