2009-09-14 6 views
6

tengo estas cabeceras en el código acfileno, F_LOCK y F_ULOCK convertirse no declarada y no está disponible cuando agrego std = c99 bandera a gcc

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

Todo compila bien hasta que he añadido -std = c99 bandera de comando gcc (para habilitar restrict). Y esto desencadenó los siguientes errores.

warning: implicit declaration of function fileno

error: F_LOCK undeclared (first use in this function)
error: (Each undeclared identifier is reported only once error: for each function it appears in.)
error: F_ULOCK undeclared (first use in this function

¿Alguna idea para evitar estos errores/advertencias?

Respuesta

8

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

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

Si estoy compilando con -std=c89, da la versión POSIX correcta; si compila con -std=c89, proporciona la versión POSIX correcta. Utilizo esto 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 el momento.

Esta estrofa debe aparecer antes de incluir encabezados de sistema (en su propio encabezado o en cada archivo fuente) o necesita lograr el mismo efecto con -D_XOPEN_SOURCE=600 en la línea de comandos del compilador o algún otro mecanismo similar.

1

Usted puede tratar de -D_BSD_SOURCE para permitir BSD-ismos o -D_SVID_SOURCE para permitir ismos System-V

+0

Use '-D_DARWIN_C_SOURCE' en MacOS X; '-D__EXTENSIONS__' en Solaris; '-D_GNU_SOURCE' en Linux; y la lista continúa (no estoy seguro de cuáles son los equivalentes en HP-UX y AIX, pero existen, casi con seguridad). –

5

Trate

-std=gnu99 

para permitir que todas las extensiones y seguir utilizando las mejoras en el idioma C99.

Cuestiones relacionadas