las - lenguaje c++
Código fuente de las funciones c/c++. (14)
Quería echar 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 codificación en c / c ++. ¿Podría decirme dónde puedo encontrarlo?
Gracias.
"The Standarc C Library" es una especificación. Desea las fuentes para una implementación de la especificación. Su compilador de C puede o no proporcionar tales fuentes, una que lo hace es GCC .
Aquí están las funciones generales de strXXX C en NetBSD: http://cvsweb.netbsd.org/bsdweb.cgi/src/common/lib/libc/string/
Aquí está la implementación de NetBSD strXXX para los procesadores i386 http://cvsweb.netbsd.org/bsdweb.cgi/src/common/lib/libc/arch/i386/string/
En general, encuentro que BSD libc es mucho más fácil de leer que el de GNU. Hay menos "gcc-isms", el núcleo es mucho más claro en la intención, etc ... Por ejemplo, el código BSD para malloc es bastante legible en comparación con glibc
Hace unos 10 años, leí The Standard C Library de Plauger . Lo recomiendo a fondo.
La mayoría de los compiladores proporcionan código fuente para la biblioteca, sin embargo, ese código fuente suele ser 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 de manera bastante económica si se usa uno usado. El código presentado no siempre es sencillo, pero Plauger lo explica bastante bien (y da las razones por las que no siempre puede ser sencillo y seguir el estándar).
Mira una implementación de la biblioteca estándar de libc C. Para ver cómo se implementa una biblioteca de C real y popular, intente ver el código glibc. Puedes acceder al código usando git:
git clone git: //sourceware.org/git/glibc.git
En cuanto a C ++, puede encontrar la biblioteca estándar de glibc ++ en uno de estos duplicados:
http://gcc.gnu.org/mirrors.html
También puede consultar uLibc, que probablemente sea más sencillo que la biblioteca GNU:
http://git.uclibc.org/uClibc/tree/
Para darle una idea, aquí está la implementación de 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;
}
Muchas funciones de la biblioteca estándar de C tienen listas de código fuente y discusiones en el lenguaje de programación C de Kernighan y Ritchie . Las discusiones son una forma útil de aprender más sobre los aspectos específicos del lenguaje C y cómo funcionan las funciones de la biblioteca estándar.
Puede revisar una copia de glibc , que tendrá el código fuente de todas las funciones de C en la biblioteca estándar de C. Ese debería ser un buen punto de partida.
Si usas Visual Studio Professional o Team, deberías poder encontrar la fuente aquí:
C: / Archivos de programa / Microsoft Visual Studio 9.0 / VC / crt / src
También puedes echar un vistazo al árbol de fuentes de OpenBSD . Específicamente, usted desea el subdirectorio de cadena de libc .
Vale la pena señalar que el código fuente de la biblioteca estándar de C no destaca necesariamente las buenas prácticas de codificación. Como biblioteca estándar, tiene un estado especial en el que, por ejemplo, puede confiar en muchos comportamientos no específicos o no portátiles simplemente porque conocen el compilador exacto con el que se utiliza.
Y, por supuesto, esto solo le informa acerca de las prácticas de codificación en C.
Eso no tiene nada que ver con las prácticas de codificación de C ++, que son muy diferentes. No los trates como un solo idioma. No hay tal cosa como C / C ++. C es un lenguaje con sus propias prácticas de codificación y expresiones idiomáticas comunes, y C ++ es un lenguaje independiente e independiente que también tiene sus propias prácticas y expresiones idiomáticas.
Un buen código C es raramente un buen código C ++. strcpy
y otras funciones de la biblioteca de C ciertamente no son un buen código de C ++.
La implementación variará algo de un sistema operativo a otro, pero la implementación de GNU / Linux probablemente sea la más fácil de encontrar.