código fuente de las funciones c / c ++

Quería echarle un vistazo a la implementación de diferentes funciones de C / C ++ (como strcpy, stcmp, strstr). Esto me ayudará a conocer buenas prácticas de encoding en c / c ++. ¿Podrías decirme dónde puedo encontrarlo?

Gracias.

Puede consultar una copia de glibc , que tendrá el código fuente de todas las funciones C en la biblioteca estándar de C. Ese debería ser un buen lugar para comenzar.

Vale la pena señalar que el código fuente de la biblioteca estándar C no necesariamente resalta las buenas prácticas de encoding. Como biblioteca estándar, tiene un estado especial en el que, por ejemplo, puede confiar en un gran número de comportamientos no especificados o no portátiles simplemente porque conocen el comstackdor exacto con el que se utiliza.

Y, por supuesto, esto solo le informa sobre las prácticas de encoding C.

Eso no tiene nada que ver con las prácticas de encoding C ++, que son muy diferentes. No los trate como un solo idioma. No existe tal cosa como C / C ++. C es un lenguaje con sus propias prácticas de encoding y expresiones comunes, y C ++ es un lenguaje separado e independiente que también tiene sus propias prácticas y expresiones idiomáticas.

El buen código C raramente es un buen código C ++. strcpy y otras funciones de la biblioteca C ciertamente no son un buen código C ++.

Muchas de las funciones estándar de la biblioteca C tienen listados de código fuente y discusiones en The C Programming Language por Kernighan & Ritchie . Las discusiones son una forma útil de aprender más sobre los detalles del lenguaje C y cómo funcionan las funciones en la biblioteca estándar bajo el capó.

La mayoría de los comstackdores proporcionan el código fuente de la biblioteca; sin embargo, ese código fuente suele ser bastante más complejo y complejo de lo que cabría esperar.

Un buen recurso para esto es el libro de PJ Plauger, “The Standard C Library” , que puede obtenerse a un precio muy bajo si elige uno usado. El código presentado no siempre es directo, pero Plauger lo explica bastante bien (y explica las razones por las cuales no siempre puede ser sencillo y seguir el estándar).

Mire una implementación de la librería estándar C de libc . Para ver cómo se implementa una biblioteca C real y popular, intente mirar el código glibc. Puede acceder al código usando git:

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

En cuanto a C ++, puede encontrar la biblioteca estándar glibc ++ en uno de estos servidores espejo:

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

También puede consultar uLibc, que probablemente será más simple que la biblioteca de GNU:

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

Para darle un sabor, aquí está la implementación strncpy de uLibc:

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

Aquí está strcmp y strstr

biblioteca c estándar

“La Biblioteca Standarc C” es una especificación. Desea las fonts para una implementación de la especificación. Su comstackdor C puede o no proporcionar tales fonts, una que lo hace es GCC .

También puedes echarle un vistazo al árbol de fonts de OpenBSD . Específicamente, desea el subdirectorio de cadena de libc .

Hace aproximadamente 10 años, leí The Standard C Library de Plauger . Lo recomiendo ampliamente

Aqui tienes

La implementación variará de OS a SO, pero la implementación de GNU / Linux probablemente será la más fácil de encontrar.

Aquí están las funciones generales strXXX C en NetBSD: http://cvsweb.netbsd.org/bsdweb.cgi/src/common/lib/libc/string/

Aquí está la implementación de NetBSD strXXX para procesadores i386 http://cvsweb.netbsd.org/bsdweb.cgi/src/common/lib/libc/arch/i386/string/

Si usa Visual Studio Professional o Team, debería poder encontrar la fuente aquí:

C: \ Archivos de progtwig \ Microsoft Visual Studio 9.0 \ VC \ crt \ src

Para sus propósitos, este libro puede ser útil: Dominar algoritmos con C

En general, considero que la librería BSD es mucho más fácil de leer que la de GNU. Hay menos “gcc-ismos”, el núcleo es mucho más claro en su intención, etc. … Por ejemplo, el código BSD para malloc es bastante legible en comparación con glibc