fileno, F_LOCK y F_ULOCK no se declaran y no están disponibles cuando agrego std = c99 flag a gcc

StackOverflow https://stackoverflow.com/questions/1423185

  •  07-07-2019
  •  | 
  •  

Pregunta

Tengo estos encabezados en un código c

#include <stdio.h>
#include <unistd.h>

Todo se compiló bien hasta que agregué el indicador -std = c99 al comando gcc (para habilitar restrict ). Y esto provocó los siguientes errores.

  

advertencia: declaración implícita de   función fileno

     

error: F_LOCK no declarado (primer uso   en esta función)
  error: (cada identificador no declarado es   reportado solo una vez error:   para cada función en la que aparece.)
  error: F_ULOCK no declarado (primer uso   en esta función

¿Alguna idea para solucionar estos errores / advertencias?

¿Fue útil?

Solución

Debe indicar a los encabezados que desea las extensiones POSIX. En estos días, uso:

#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */

Si estoy compilando con -std = c89 , me da la versión POSIX correcta; si compila con -std = c89 , le da la versión correcta de POSIX. Lo uso en Solaris 9 y 10, MacOS X (10.4.x, 10.5.x), HP-UX 11.x, Linux (RHEL4 y 5, SuSE 9 y 10) y AIX 5.xy 6.x - AFAICR , sin problemas hasta ahora.

Esta estrofa debe aparecer antes de que se incluyan los encabezados del sistema (en su propio encabezado o en cada archivo de origen), o debe lograr el mismo efecto con -D_XOPEN_SOURCE = 600 en el comando del compilador línea, o algún otro mecanismo similar.

Otros consejos

Probar

-std=gnu99

para habilitar todas las extensiones y seguir utilizando las mejoras del lenguaje C99.

Puede intentar -D_BSD_SOURCE para habilitar BSD-isms o -D_SVID_SOURCE para habilitar System-V isms

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top