Estoy hasta las rodillas en [K&R88] y gcc me regaña porque la función getline() , que K&R usa como ejemplo y material de práctica, ahora está en stdio.h (y ha estado desde alrededor de 2010, me dijeron .)
¿Habría alguna manera de decirle al compilador que lo reproduzca como si fuera 1988 y que mi versión casera reemplace a la de la biblioteca?
(sí, es inútil, pero meterse en [K&R88] es mi nuevo pasatiempo ;-)
Salida del compilador obligatoria:
gcc -g -Wall -o "pgm" "pgm.c" (in directory: /home/eric/Development/6.087) pgm.c:9:7: error: conflicting types for 'getline' 9 | char *getline(){ | ^~~~~~~ In file included from pgm.c:1: /usr/include/stdio.h:616:18: note: previous declaration of 'getline' was here 616 | extern __ssize_t getline (char **__restrict __lineptr, | ^~~~~~~ Compilation failed.La función getline que entra en conflicto con la suya no es parte del C estándar, esgetline de POSIX.
Si compila con C estándar usando -std :
gcc -g -Wall -std=c17 -o pgm pgm.cpuedes evitar el conflicto.
Habiendo dicho eso, no hay razón para aprender de K&R C (es más una referencia en mi opinión) si estás comenzando en C. Y tampoco vamos a volver a 1988 ;-)
El lenguaje ha cambiado mucho desde entonces y hay una buena lista de recomendaciones disponibles en The Definitive C Book Guide and List .