由于标准的层次,c ++的包含文件是一个老鼠巢。我试图找出__isnan
实际调用的内容,并且找不到任何具有实际定义的内容。
所以我只用-S编译来查看程序集,如果我写的话:
#include <ieee754.h>
void f(double x) {
if (__isinf(x) ...
if (__isnan(x)) ...
}
这两个例程都被调用。我希望看到实际的定义,并且可能重构这样的内容,因为它应该只是一点比较,尽管当值在浮点寄存器中时很难实现。
无论如何,无论是否一个好主意,问题都在于:__isnan(x)
的源代码是什么?
答案 0 :(得分:3)
Glibc在sysdeps文件夹中为其支持的每个系统提供了代码版本。您正在寻找的是sysdeps/ieee754/dbl-64/s_isnan.c。我发现这是git grep __isnan
。
(虽然C ++标题包含模板的代码,但C库中的函数不会,你必须查看glibc或其中任何一个。)
答案 1 :(得分:1)
Here,对于glibc的主人来说。