我想看一下不同C/C++函数的实现(比如strcpy,stcmp,strstr).这将有助于我了解c/c ++中的良好编码实践.你能告诉我在哪里可以找到它吗?
谢谢.
你可以查看一份glibc,它将包含C标准库中所有C函数的源代码.这应该是一个很好的起点.
值得指出的是,C标准库的源代码并不一定突出了良好的编码实践.作为标准库,它具有特殊的状态,例如,它可以依赖于许多未指定或不可移植的行为,因为它们知道使用它的确切编译器.
当然,这只会告诉您C编码实践.
这与C++编码实践无关,这与C++编码实践截然不同.不要将它们视为一种语言.没有C/C++这样的东西.C是一种具有自己的编码实践和常用习语的语言,C++是一种独立的,独立的语言,也有自己的实践和习语.
好的C代码很少是好的C++代码.strcpy
和其他C库函数肯定不是很好的C++代码.
大多数编译器都提供了库的源代码 - 但是源代码通常比您预期的更复杂和复杂.
PJ Plauger的书"标准C库"是一个很好的资源,如果你选择使用它,它可以非常便宜.提供的代码并不总是直截了当,但Plauger很好地解释了它(并给出了为什么它不能总是直截了当仍然遵循标准的原因).
许多C标准库函数都有Kernighan和Ritchie的C编程语言中的源代码清单和讨论.讨论是一种有用的方式,可以更多地了解C语言的细节以及标准库中的函数如何在底层工作.
查看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; }
这是strcmp和strstr