簡體   English   中英

如何檢查我是否正確實現了 C 庫函數?

[英]How can I check if I implement C library functions correctly?

是否有基本 C 庫函數(如strcmpmemset等)的源/數據庫?
我想實現基本的 C 庫函數,但我無法驗證我是否做得對。

我找到了幾個源代碼數據庫,但它們比應有的復雜得多(例如, strcpy的實現超過 30 行,其中一半與復制字符串無關,我認為)。

“基本”C 庫函數對於程序性能和正確性也是最重要的,因此往往有一些復雜的實現。

我建議您查看Newlib的代碼。 它是一個用於嵌入式系統的基本 C 庫(您的電視可能會運行它),它也用於 Cygwin。 該許可證也主要與出於您自己目的的“借用”源兼容,但要小心,因為其中的某些部分(某些文件)是 GPL。

查看OpenBSD C 庫 例如,這是它的基本strcpy

char *
strcpy(char *to, const char *from)
{
    char *save = to;

    for (; (*to = *from) != '\0'; ++from, ++to);
        return(save);
}

這些函數的文檔以聯機幫助頁的形式包含在內。

(它還帶有常用例程的優化版本,通常在匯編程序中,因此 C 版本確實應該被視為參考實現。)

PJ Plauger 有一本很棒的書The Standard C Library 它有點過時(1992 年),但如果您想實現 libc 並正確執行,它仍然是寶貴的資源。 它包含庫的完整代碼。 還有musl libc 代碼位於 git repo 中。 實現並不簡單,但如果我將它與其他實現進行比較,它確實小而簡單。 正如其他人已經提到的,C 標准是您想要查看的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM