glibc 文档中缺少格式说明符 %F

z32*_*7ul 4 c printf glibc

我偶然发现GNU C 库文档中存在以下缺陷:

\n
\n

\xe2\x80\x98%f\xe2\x80\x99

\n

以正常(定点)表示法打印浮点数。有关详细信息,请参阅浮点转换。

\n
\n

%F尽管根据C99 标准,但它没有在任何地方提到:

\n
\n

F 转换说明符分别生成 INF、INFINITY 或 NAN,而不是 inf、infinity 或 nan。

\n
\n

一个简单的例子来测试这一点:

\n
double inf = 1.0 / 0.0;\nprintf( "Testing on %ld.%ld, %%f: %f and %%F: %F.\\n", __GLIBC__, __GLIBC_MINOR__, inf, inf );\n
Run Code Online (Sandbox Code Playgroud)\n

这输出:

\n
Testing on 2.24, %f: inf and %F: INF.\n
Run Code Online (Sandbox Code Playgroud)\n

所以它应该按其应有的方式工作,而不是像文档所说的那样。

\n

F我在想为什么文档中没有大写功能。是否有意义?是的。符合标准吗?是的。是否能够实施?是的。所以,我不明白原因。

\n

是否有约定将标准规定的问题自动视为库文档的一部分?使用安全吗%F以 printf 格式

\n

Lun*_*din 5

各种开源项目附带不完整或不正确的文档并不是新闻。该文档确实缺少此信息。

2.36 文档也缺少此信息。结论:文档很糟糕。

是的,%F根据 C99 是完全安全且定义明确的。但是,对于非常旧的编译器版本(例如 gcc < 5.0.0),您应该使用它进行编译-std=c99。