Prefacios
Prefacios de El Lenguaje de Programacion C
Prefacio de la segunda edicion
1988
El mundo de la computacion ha sufrido una revolucion desde la publicacion, en 1978, de El lenguaje de programacion C. Las grandes computadoras son ahora mucho mas grandes, y las computadoras personales tienen capacidades que rivalizan con los mainframes de hace una decada. Tambien el lenguaje C ha cambiado en ese tiempo, aunque solo en forma modesta, y se ha extendido mas alla de lo que fueron sus origenes como el lenguaje del sistema operativo UNIX.
La creciente popularidad de C, los cambios en el lenguaje a lo largo de los anos, y la creacion de compiladores por grupos no involucrados en su diseno, se combinaron para demostrar la necesidad de una definicion del lenguaje mas precisa y contemporanea que la que proporciono la primera edicion de este libro.
En 1983, el American National Standards Institute (ANSI) establecio un comite cuyos propositos eran producir “una definicion no ambigua del lenguaje C, independiente de la maquina” , cuidando la conservacion de su espiritu. El resultado es el estandar ANSI para el lenguaje C.
El estandar formaliza construcciones sugeridas pero no descritas en la primera edicion, particularmente la asignacion de estructura y las enumeraciones. Proporciona una nueva forma de declaracion de funciones, que permite revisar comparativamente su definicion y uso. Especifica una biblioteca estandar, con un conjunto extensivo de funciones para realizar la entrada y salida, la administracion de memoria, la manipulacion de cadenas y tareas semejantes. Precisa el comportamiento de caracteristicas que no se mencionaron en la definicion original, y al mismo tiempo establece explicitamente cuales aspectos del lenguaje tienen aun dependencia de maquina.
Esta segunda edicion de El lenguaje de programacion C lo describe tal como lo definio el estandar ANSI. (En el momento de escribir esta edicion, el estandar se encontraba en la etapa final de revision; se esperaba su aprobacion a finales de 1988. Las diferencias entre lo que se ha descrito aqui y la forma final deberan ser minimas.) Aunque hemos hecho anotaciones en los lugares donde el lenguaje ha evolucionado, preferimos escribir exclusivamente en la nueva forma. En general esto no hace una diferencia significativa; el cambio mas visible es la nueva forma de declaracion y definicion de funciones. Los modernos compiladores manejan ya la mayoria de las posibilidades del estandar.
Hemos tratado de mantener la brevedad de la primera edicion. El lenguaje C no es grande, y no le esta bien un gran libro. Hemos mejorado la exposicion de caracteristicas criticas, como los apuntadores, que son parte central en la programacion con C. Hemos redefinido los ejemplos originales y agregamos ejemplos nuevos en varios capitulos. Por ejemplo, se aumento el tratamiento de declaraciones complicadas con programas que convierten declaraciones en palabras y viceversa. Como antes, todos los ejemplos se han probado directamente a partir del texto, el cual esta disenado de manera que lo pueda leer la maquina.
El apendice A, manual de referencia, no es el estandar, sino que nuestra intencion fue trasladar la esencia del estandar a un espacio mas pequeno. Esta hecho con el animo de que proporcione una facil com prension para los programadores, pero no como una definicion del lenguaje para quienes escriben compiladores —ese papel propiamente le corresponde al estandar en si. El apendice B es un resumen de las posibilidades de la biblioteca estandar. Tambien tiene el proposito de ser una referencia para programadores, no para implantadores. En el apendice C se ofrece un resumen de los cambios de la version original.
Como mencionamos en el prefacio a la primera edicion, C “se lleva bien, en la medida en que aumenta nuestra experiencia con el” . Con una decada mas de experiencia, aun lo sentimos asi. Deseamos que este libro le ayude a aprender el lenguaje C y tambien como usarlo.
Tenemos un profundo reconocimiento hacia los amigos que nos ayudaron a producir esta segunda edicion. Jo n Bentley, Doug Gwyn, Doug Mcllroy, Peter Nelson y Rob Pike nos dieron valiosos comentarios sobre casi cada pagina del borrador de este manuscrito. Estamos agradecidos por la cuidadosa lectura de AI Aho, Dennis Allison, Joe Campbell, G. R. Emlin, Karen Fortgang, Alien Holub, Andrew H um e, Dave Kristol, John Linderm an, Dave Prosser, Gene Spafford, y Chris Van Wyk. Tambien recibimos utiles sugerencias de Bill Cheswick, Mark Kernighan, Andy Koening, Robin Lake, Tom London, Jim Reeds, Clovis Tondo y Peter Weinberger. Dave Prosser respondio muchas preguntas detalladas acerca del estandar ANSI. Utilizamos extensivamente el interprete de C++ de Bjarne Stroustrup, para la prueba local de nuestros programas, y Dave Kristol nos ofrecio un compilador ANSI C para las pruebas finales. Rich Drechsler nos ayudo grandemente con la composicion.
Nuestro sincero agradecimiento a todos.
Brian W. Kernighan
Dennis M. Ritchie
Prefacio de la Primer edicion
1979
C es un lenguaje de programacion de propositos generales caracteristicas de economia de expresion, control de flujo moderno, y estructuras de datos, con un rico conjunto de operadores. C no es un lenguaje de "muy alto nivel", ni uno "grande", y no se especializa en ningun area de aplicacion en particular. Pero su ausencia de restricciones y su generalidad lo hacen mas conveniente y efectivo para muchas tareas que otros lenguajes supuestamente mas poderosos.
C fue disenado originalmente por Dennis Ritchie por medio y para ser implementado en el sistema operativo UNIX en la DEC PDP-11. El sistema operativo, el compilador de C, y escencialmente todos los programas de aplicaciones UNIX (incluyendo todo el software empleado para preparar este libro) estan escritos en C. Los compiladores de produccion tambien existen vara varias otras maquinas, incluyendo la IBM System/370, la Honeywell 6000, y la Interdata 8/32. C no esta atado a ningun hardware ni sistema en particular, y sin embargo, resulta sencillo escribir programas que se ejecutaran sin cambios en cualquier maquina que soporte C.
Este libro esta pensado para ayudar al lector a aprender como programar en C. Contiene un tutorial introductorio para que los nuevos usuarios comiencen tan pronto como sea posible, capitulos separados de cada funcionalidad principal, y un manual de referencia. La mayoria del tratamiento se basa en leer, escribir y revisar los ejemplos, en lugar de meras declaraciones de reglas. En general, los ejemplos son programas reales completos en lugar de fragmentos aislados. Todos los ejemplos han sido evaluados directamente desde el texto, que esta en forma legible a maquina. Ademas, mostrar como hacer efectivo uso del lenguaje, tambi+en hemos intentado dentro de lo posible ilustrar algoritmos y principios utiles de buen estilo y diseno adecuado.
El libro no es un manual de programacion introductorio; asume alguna familiaridad con los conceptos basicos de la programacion, como las variables, asignacion de declaraciones, bucles, y funciones.
Aun asi, un programador novato deberia ser capaz de leer y comprender el lenguaje, aunque ayudara el acceso a un colega mas conocedor.
En miestra experiencia, C ha demostrado ser un lenguaje agradable, expresivo, y versatil para una amplia variedad de programas. Es facil de aprender, y se adecua bien a medida que crece la experiencia con el. Deseamos que este libro lo ayude a usarlo tambien.
Las consideradas criticas y sugerencias de muchos amigos y colegas han sumado mucho a este libro, asi como a nuestro placer al escribirlo. En particular, Mike Bianchi, Jim Blue, Stu Feldman, Doug McIlroy, Bill Roome, Bob Rosin y Larry Rosler leyeron cuidadosamente sus multiples volumenes. Tambien estamos en deuda con Al Aho, Steve Bourne, Dan Dvorak, Chuck Haley, Debbie Haley, Marion Harris, Rick Holt, Steve Johnson, John Mashey, Bob Mitze, Ralph Muha, Peter Nelson, Elliot Pinson, Bill Plauger, Jerry Spivack, Ken Thompson, y Peter Weinberger por sus oportunos comentarios en varias etapas, y a Mile Lesk y Joe Ossanna por la asistencia invaluable con el formato de impresion.
Brian W. Kernighan
Dennis M. Ritchie