Estaba jugando con un emulador PDP11 en línea ( enlace ) y estaba mirando la sección de programación de sus preguntas frecuentes .
Dice esto sobre la programación en C en el emulador:
Debe escribir C anterior a K&R, que es bastante diferente del C moderno
Creo que esto se refiere a la versión de C en uso antes de la publicación de The C Programming Language . He tratado de entender esta versión leyendo los archivos C dispersos que puedo encontrar en el sistema de archivos del emulador, pero incluso cosas simples como declarar argc y argv me han eludido. Tampoco puedo encontrar nada al respecto en línea.
¿Hay alguna documentación, escrita en el momento o después del hecho, sobre C "pre-K&R"?
Para este tipo de preguntas, mi fuente de acceso es la página web archivada del difunto Dennis Ritchie:
https://www.bell-labs.com/usr/dmr/www/
A partir de ahí, basta un clic para acceder a este manual de referencia inicial para C, escrito por el propio Ritchie:
https://www.bell-labs.com/usr/dmr/www/cman.pdf
Esto es de hecho "pre-K&R C", con anacronismos como =+ en lugar de += .
Este es el mismo manual de referencia que apareció, en forma actualizada, como Apéndice A en el libro K&R.
En la misma página hay enlaces a varias otras versiones de ese manual de referencia, así como notas e incluso el código fuente de dos versiones anteriores del compilador de Ritchie . Estos son bastante divertidos de ver, aunque como señala la página, "No podrá compilarlos con los compiladores de hoy".
Hay un sitio completo de Stack Exchange dedicado a preguntas como estas: https://retrocomputing.stackexchange.com/ .
Steve Summit respondió sobre dónde obtener la documentación. Por lo tanto, esta publicación pretende resumir las diferencias notables de C moderno
Los tipos de argumentos de función eran bastante diferentes. No se especificaron entre paréntesis.
void foo(a, b) int a; float b; { // Function body } Sin comentarios de fila, como // . Solo /* */
No es lógico or y and . Los operadores && y || no existió. Los operadores bit a bit & y | en su lugar.
=- significaba lo mismo que -= , lo que genera ambigüedad con, por ejemplo, x=-1 .
No hubo punteros void . En su lugar, se usaron punteros char .
No se podían declarar variables en el encabezado for, por lo que había que escribir:
int i=0; for(i=0; i<N; ++i) = solo se usaron para asignaciones y no para inicialización. Esos se hicieron así: int x 3;
int implícito. Esto todavía es válido en C moderno. La diferencia es que ningún programador (cuerdo) lo está usando más. Este:
foo 3;en realidad es equivalente a
int foo = 3; No hubo calificador const