GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué obtengo un error de tipos en conflicto para getline al compilar el ejemplo de la línea más larga en el capítulo 1 de K&R2?

La función conflictiva getline() es una extensión GNU/POSIX.

K&R afirma que abordan específicamente ANSI C en su libro (cf.), que no proporciona esta función.

Los autores presentan la guía completa de programación en lenguaje C estándar ANSI.

Para configurar gcc en "modo de compatibilidad K&R", puede especificar los modos ANSI o ISO para la compilación. Estos están destinados a deshabilitar extensiones, por ejemplo, la función getline() .Esto eventualmente podría eliminar la necesidad de editar otros ejemplos proporcionados por K&R también.

Por ejemplo, la siguiente compilación está bien:

$ gcc test.c -ansi
$ gcc test.c -std=c89

(Excepto que se quejan del tipo de retorno predeterminado implícito de main() con -Wall .)

Aparentemente, en algunos sistemas, estos modos pueden no funcionar como se presenta aquí (aparentemente, algunas versiones de Mac OS no pueden deshabilitar correctamente todas las extensiones). Probé esto con éxito en mi máquina:

$ gcc --version
gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

El problema es que getline() es una función de biblioteca estándar. (definido en stdio.h ) Su función tiene el mismo nombre y, por lo tanto, está en conflicto con ella.

La solución es simplemente cambiar el nombre.


Esto se debe a que el stdio.h tener un getline() función.

Entonces, una cosa simple para hacer que esto funcione sería cambiar el nombre de su función a my_getline()

Ambos getline() y getdelim() eran originalmente GNU extensiones Fueron estandarizados en POSIX.1-2008 .


Linux
  1. ¿Cuándo aparece el mensaje de error "trabajos:no encontrado"?

  2. ¿Cómo unirse a la siguiente línea cuando una línea coincide con una expresión regular para todo el documento en Vi?

  3. ¿Por qué `zip` en un bucle For funciona cuando el archivo existe, pero no cuando no existe?

  4. ¿Trap, Err y haciendo eco de la línea de error?

  5. ¿Obtener el porcentaje de uso de un punto de montaje?

8 consejos para la línea de comandos de Linux

4 herramientas Markdown para la línea de comandos de Linux

Por qué usar el escritorio Pantheon para Linux Elementary OS

3 gestores de contraseñas para la línea de comandos de Linux

¿Cómo encuentro el número de línea en Bash cuando ocurre un error?

obtener un error de línea de comando incorrecta al intentar extraer el archivo 7zip en Linux