如何检查是否正确实现了C库函数?

时间:2012-11-27 13:19:18

标签: c libc

是否有基本C库函数的源/数据库(如strcmpmemset等)?
我想实现基本的C库函数,但我无法验证我是否正确。

我发现了几个源代码数据库,但它们比它们应该复杂得多(例如strcpy的实现超过30行,其中一半与复制字符串无关,我认为) 。

3 个答案:

答案 0 :(得分:1)

“基本”C库函数对程序性能和正确性也是最重要的,因此往往会有一些复杂的实现。

我建议您查看Newlib的代码。它是一个用于嵌入式系统的基本C库(您的电视可能运行得很好),它也用于Cygwin。许可证也基本上与您自己的“借用”源兼容,但要小心,因为它的某些部分(某些文件)是GPL。

答案 1 :(得分:1)

查看OpenBSD C library。例如,这是它的基本strcpy

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

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

这些功能的文档包含在联机帮助页中。

(它还带有optimized versions个常用例程,通常是汇编程序,因此C版本应该被视为参考实现。)

答案 2 :(得分:1)

P.J. Plauger有一本很棒的书The Standard C Library。它有点过时(1992年),但如果你想实现libc并且做得对,它仍然是宝贵的资源。它包含库的完整代码。还有musl libc。代码存在于git repo中。实现并不简单,但如果我将它与其他实现进行比较,它实际上是小而简单的。正如其他人已经提到的那样,C标准是你想看的东西。