2010-11-15 73 views
3

由於標準層次的原因,C++的包含文件是鼠窩。我試圖找出__isnan實際調用的內容,並且找不到實際定義的任何地方。isnan的源代碼在哪裏?

於是我就用-S編譯看到大會,如果我寫:

#include <ieee754.h> 

void f(double x) { 
    if (__isinf(x) ... 

    if (__isnan(x)) ... 
} 

這些例程的兩個被調用。我希望看到實際的定義,並且可能將這樣的內容重構爲內聯,因爲它應該只是有點比較,儘管當值在浮點寄存器中時很難實現。

無論如何,不​​管這是不是一個好主意,問題是:WHERE是__isnan(x)的源代碼?

回答

3

Glibc在其支持的每個系統的sysdeps文件夾中都有代碼版本。你正在尋找的是在sysdeps/ieee754/dbl-64/s_isnan.c。我發現這與git grep __isnan

(雖然C++頭文件包括模板代碼,從C庫函數不會,你要看看裏面的glibc或兩者)