c/c ++函数的源代码

20 c c++

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

谢谢.

mip*_*adi 27

你可以查看一份glibc,它将包含C标准库中所有C函数的源代码.这应该是一个很好的起点.

  • 虽然这是第一个想到的答案,但它可能不是了解具有普遍适用性的"良好编码实践"的最佳场所.这是因为glibc函数有合理的理由进行大量微优化 - 甚至是特定于平台的优化 - 仅仅因为它们是标准库函数.这通常不是一般编程的好习惯. (3认同)

jal*_*alf 17

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

当然,这只会告诉您C编码实践.

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

好的C代码很少是好的C++代码.strcpy和其他C库函数肯定不是很好的C++代码.

  • 我认为没有人提到托管代码.在大多数情况下,清洁/便携和高效代码之间也没有矛盾.人们认为*只有*算法效率很重要才会忽略这一点. (2认同)

Mic*_*urr 7

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

PJ Plauger的书"标准C库"是一个很好的资源,如果你选择使用它,它可以非常便宜.提供的代码并不总是直截了当,但Plauger很好地解释了它(并给出了为什么它不能总是直截了当仍然遵循标准的原因).


Pet*_*ete 6

许多C标准库函数都有Kernighan和Ritchie的C编程语言源代码清单和讨论.讨论是一种有用的方式,可以更多地了解C语言的细节以及标准库中的函数如何在底层工作.

  • K&R中的许多功能都以简化形式显示,但如果将它们用作示例,则可能会更好. (2认同)
  • 对于C语言编程的人来说,K&R应该是必读的.很少有人在如此少的页面中写出如此优秀的东西. (2认同)

IRB*_*BMe 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;
}
Run Code Online (Sandbox Code Playgroud)

这是strcmpstrstr

  • 一个很好的例子说明为什么真正的C库实现不是一般适用的良好编程实践的良好指南 - 对于不同的C编译器具有相同循环的那两个稍微重构的版本,在大多数编程中几乎都不合理.我会的. (6认同)