2009-09-14 11 views
6

mam te nagłówki w kodzie acfileno, F_LOCK i F_ULOCK stać nierejestrowana i niedostępne, gdy dodam std = c99 flag do gcc

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

Wszystko zestawiane w porządku, dopóki nie dodał -std = flagę C99 do polecenia gcc (aby włączyć restrict). I to spowodowało następujące błędy.

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

Jakieś pomysły na obejście tych błędów/ostrzeżeń?

Odpowiedz

8

Musisz powiedzieć nagłówkom, że chcesz rozszerzeń POSIX. Te dni, używam:

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

Jeśli mam kompilacji z -std=c89, daje poprawną wersję POSIX; jeśli kompilujesz z -std=c89, daje to poprawną wersję POSIX. Używam tego w systemach Solaris 9 i 10, MacOS X (10.4.x, 10.5.x), HP-UX 11.x, Linux (RHEL4 i 5, SuSE 9 i 10) oraz AIX 5.x i 6.x - AFAICR , bez problemów do tej pory.

Ta sekcja powinna pojawić się, zanim jakiekolwiek nagłówki systemowe zostaną uwzględnione (w twoim własnym nagłówku lub w każdym pliku źródłowym), lub musisz osiągnąć ten sam efekt z -D_XOPEN_SOURCE=600 w linii poleceń kompilatora lub innym podobnym mechanizmie.

1

Można spróbować -D_BSD_SOURCE włączyć BSD izmy lub -D_SVID_SOURCE włączyć system-V izmy

+0

Użyj '-D_DARWIN_C_SOURCE' na MacOS X; '-D__EXTENSIONS__' w systemie Solaris; '-D_GNU_SOURCE' w systemie Linux; a lista jest kontynuowana (nie wiesz, jakie są odpowiedniki w HP-UX i AIX, ale istnieją, prawie na pewno). –

5

Spróbuj

-std=gnu99 

włączyć wszystkie rozszerzenia i nadal korzystać z rozszerzeń języka C99.

Powiązane problemy