fileno, F_LOCK e F_ULOCK se tornar não declarado e indisponível quando eu adiciono std = c99 bandeira para gcc
Pergunta
Eu tenho esses cabeçalhos em um código c
#include <stdio.h>
#include <unistd.h>
Tudo bem compilado até que eu adicionei -std = c99 bandeira de comando gcc (para permitir restringir ). E isso desencadeou os seguintes erros.
aviso: declaração implícita de função
fileno
erro:
F_LOCK
não declarado (primeiro uso nesta função)
erro: (Cada identificador não declarado é relatado apenas uma vez de erro: para cada função aparece no.)
erro:F_ULOCK
não declarado (primeiro uso nesta função
Todas as idéias para resolver esses erros / avisos?
Solução
Você precisa dizer os cabeçalhos que você deseja que as extensões POSIX. Esses dias, eu uso:
#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */
Se eu estou compilando com -std=c89
, dá a versão POSIX correta; se você compilar com -std=c89
, dá a versão POSIX correta. Eu uso isso no Solaris 9 e 10, MacOS X (10.4.x, 10.5.x), HP-UX 11.x, Linux (RHEL4 e 5, o SUSE 9 e 10) e AIX 5.x e 6.x - AFAICR , sem problemas até agora.
Esta estrofe deve aparecer antes de quaisquer cabeçalhos de sistema estão incluídos (no seu próprio cabeçalho, ou em cada arquivo de origem), ou que você precisa para conseguir o mesmo efeito com -D_XOPEN_SOURCE=600
na linha de comando do compilador, ou algum outro mecanismo similar.
Outras dicas
Tente
-std=gnu99
para ativar todas as extensões e ainda usar os aprimoramentos de linguagem C99.
Você pode tentar -D_BSD_SOURCE para permitir BSD-ismos ou -D_SVID_SOURCE para permitir ismos System-V