c / c ++函数的源代码

时间:2009-07-14 18:59:09

标签: c++ c

我想看一下不同C / C ++函数的实现(比如strcpy,stcmp,strstr)。这将有助于我了解c / c ++中的良好编码实践。你能告诉我在哪里可以找到它吗?

感谢。

14 个答案:

答案 0 :(得分:27)

您可以查看glibc的副本,其中包含C标准库中所有C函数的源代码。这应该是一个很好的起点。

答案 1 :(得分:17)

值得指出的是,C标准库的源代码并不一定突出了良好的编码实践。作为标准库,它具有特殊的状态,例如,它可以依赖于许多未指定或非可移植的行为,因为它们知道使用它的确切编译器。

当然,这只会告诉你C编码实践。

这与C ++编码实践无关,这与C ++编码实践截然不同。不要将它们视为一种语言。没有C / C ++这样的东西。 C是一种具有自己的编码实践和常用习语的语言,C ++是一种独立的,独立的语言,也有自己的实践和习语。

好的C代码很少是好的C ++代码。 strcpy和其他C库函数当然不是很好的C ++代码。

答案 2 :(得分:7)

大多数编译器都提供了库的源代码 - 但是源代码通常比您预期的更复杂和复杂。

这方面的一个很好的资源是P.J. Plauger's book, "The Standard C Library",如果你选择一个旧的,它可以非常便宜。提供的代码并不总是直截了当,但Plauger很好地解释了它(并给出了为什么它不能总是直截了当地仍然遵循标准的原因。)

答案 3 :(得分:6)

许多C标准库函数都有源代码清单& The C Programming Language by Kernighan & Ritchie中的讨论。讨论是一种有用的方式,可以更多地了解C语言的具体内容。标准库中的函数如何工作。

答案 4 :(得分:5)

查看 libc 标准C库的实现。要了解如何实现真正的流行C库,请尝试查看glibc代码。您可以使用git:

访问代码

git clone git://sourceware.org/git/glibc.git

对于C ++,你可以在其中一个镜像上找到glibc ++标准库:

http://gcc.gnu.org/mirrors.html

您还可以查看uLibc,它可能比GNU库更简单:

http://git.uclibc.org/uClibc/tree/

为了给你一个味道,这是来自uLibc的 strncpy 实现:

Wchar *Wstrcpy(Wchar * __restrict s1, const Wchar * __restrict s2)
{
    register Wchar *s = s1;

#ifdef __BCC__
    do {
        *s = *s2++;
    } while (*s++ != 0);
#else
    while ( (*s++ = *s2++) != 0 );
#endif

    return s1;
}

以下是strcmpstrstr

答案 5 :(得分:2)

答案 6 :(得分:2)

“标准C库”是一个规范。您需要实现规范的源代码。您的C编译器可能提供或不提供此类源代码 - 其中包含GCC

答案 7 :(得分:2)

您还可以查看OpenBSD source tree。具体来说,您需要the string subdirectory of libc

答案 8 :(得分:2)

大约10年前,我读了The Standard C Library by Plauger。彻底推荐它。

答案 9 :(得分:1)

Here you go

从操作系统到操作系统,实现方式会有所不同,但GNU / Linux实现可能是最容易找到的实现方式。

答案 10 :(得分:0)

答案 11 :(得分:0)

如果您使用Visual Studio Professional或Team,您应该可以在此处找到源:

C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ crt \ src

答案 12 :(得分:0)

出于您的目的,此book可能会有所帮助: Mastering Algorithms with C

答案 13 :(得分:0)

一般来说,我发现BSD libc比GNU libc更容易阅读。有更少的“gcc-isms”,核心在意图上更清晰等等...例如,BSD code for mallocglibc相比具有可读性