c / c ++函数的源代码

我想看看不同的C / C ++函数(如strcpy,stcmp,strstr)的实现。 这将帮助我了解c / c ++中的良好编码习惯。 你能让我知道我在哪里可以find它?

谢谢。

你可以签出glibc的副本,它将拥有C标准库中所有C函数的源代码。 这应该是一个很好的起点。

值得指出的是,C标准库的源代码并不一定强调好的编码实践。 作为标准库,它有一个特殊的地位,例如,它可以依靠很多未指定或不可移植的行为,只是因为他们知道使用它的确切编译器。

当然,这只会告诉你C编码的做法。

这与C ++编码实践无关,这是非常不同的。 不要把它们当作一种语言。 没有C / C ++这样的东西。 C是一种具有自己的编码习惯和常用习语的语言,C ++是一个独立的,独立的语言,也有自己的习惯和惯用语。

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

许多C标准库函数都有Kernighan&Ritchie在C语言编程语言中的源代码列表和讨论。 讨论是学习更多关于C语言细节以及标准库中函数如何工作的有用方法。

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

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

看看libc标准C库的实现。 要看一个真正的,stream行的C库是如何实现的,试着看看glibc代码。 你可以使用git来访问代码:

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

至于C ++,您可以在这些镜像之一上findglibc ++标准库:

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; } 

这是strcmp和strstr

标准C库

“Standarc C库”是一个规范。 您需要实现规范的源代码。 您的C编译器可能或不会提供这样的源代码 – 一个是GCC 。

你也可以看看OpenBSD的源代码树 。 具体来说,你需要libc的string子目录 。

大约十年前,我读了Plauger的标准C库 。 彻底推荐它。

干得好

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

以下是NetBSD中的一般strXXX C函数: http ://cvsweb.netbsd.org/bsdweb.cgi/src/common/lib/libc/string/

这里是用于i386处理器的NetBSD strXXX实现http://cvsweb.netbsd.org/bsdweb.cgi/src/common/lib/libc/arch/i386/string/

如果您使用Visual Studio Professional或Team,则应该可以在此处find源代码:

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

出于您的目的, 本书可能会有所帮助: 掌握与C的algorithm

一般来说,我发现BSD libc比GNU更容易阅读。 “gcc-isms”比较less,内核的意图要清晰得多,比如说malloc的BSD代码比glibc的可读性要好