2015-04-02 19 views
1

我想知道C,如Prinf(),scanf(),sin(x),abs()等C預定義庫函數是如何工作的。它們是如何定義的以及這些功能體駐留在哪裏。深入到預定義的功能

如果我右鍵單擊這些函數,並在Visual Studio中選擇視圖定義,它將顯示如下所示(對於printf)int __cdecl printf(_In_z_ _Printf_format_string_ const char * _Format,...);

如何查看這些函數的內部部分?

+0

總之,這些是'C'庫的一部分。 – 2015-04-02 05:28:29

+0

我想知道abs(x)函數背後的編碼,它是如何計算和返回值的。 – rishi 2015-04-02 05:30:27

回答

1

如果您的實現附帶(或以其他方式提供)其運行時庫的源代碼,那就是您可以找到它的地方。

你應該首先問自己,這是否需要 ISO標準的全部內容是確保每個實現都是同一個抽象機器,而不管底層代碼如何。

這意味着您通常只需編碼即可,而不用擔心qsort是否被實現爲快速排序,合併排序,甚至是否應該與性能,泡泡排序或bogosort無關。

請注意,它將遵循標準中規定的規則。


如果仍然要檢查的庫源,像gcc將使用glibc(可here)和Visual C++源代碼附帶的產品爲好。在我的版本(VS 2013)上,它在C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\crt\src

例如,由於您表達您對abs()功能評論一個有興趣,這裏是從abs.c的VC++變量在該目錄上面列出:

int __cdecl abs (int number) { 
    return (number >= 0 ? number : -number); 
} 

沒有太多有這令人驚訝,但像output.c,它爲所有printf風格的函數提供公共代碼,時鐘大約有兩千五百行。