fileno, F_LOCK e F_ULOCK se tornar não declarado e indisponível quando eu adiciono std = c99 bandeira para gcc

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

  •  07-07-2019
  •  | 
  •  

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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top