Estou recebendo vários desses avisos ao compilar alguns binários:
warning: incompatible implicit declaration of built-in function ‘strcpy’
warning: incompatible implicit declaration of built-in function ‘strlen’
warning: incompatible implicit declaration of built-in function ‘exit’
Para tentar resolver isso, adicionei
#include <stdlib.h>
na parte superior dos arquivos C associados a esse aviso, além de compilar com os seguintes sinalizadores:
CFLAGS = -fno-builtin-exit -fno-builtin-strcat -fno-builtin-strncat -fno-builtin-strcpy -fno-builtin-strlen -fno-builtin-calloc
Estou usando o GCC 4.1.2:
$ gcc --version
gcc (GCC) 4.1.2 20080704
O que devo fazer para resolver esses avisos?
c
gcc
gcc-warning
Alex Reynolds
fonte
fonte
Respostas:
Em C, o uso de uma função não declarada anteriormente constitui uma declaração implícita da função. Em uma declaração implícita, o tipo de retorno é
int
se bem me lembro. Agora, o GCC possui definições internas para algumas funções padrão. Se uma declaração implícita não corresponder à definição interna, você receberá este aviso.Para corrigir o problema, você deve declarar as funções antes de usá-las; normalmente você faz isso incluindo o cabeçalho apropriado. Eu recomendo não usar o
-fno-builtin-*
sinalizadores, se possível.Em vez de stdlib.h , você deve tentar:
É onde
strcpy
estrncpy
são definidos, pelo menos de acordo com astrcpy
página de manual (2).A
exit
função é definida em stdlib.h , portanto, não sei o que está acontecendo lá.fonte
No caso de alguns programas, esses erros são normais e não devem ser corrigidos.
Recebo essas mensagens de erro ao compilar o phrap do programa (por exemplo). Esse programa contém código que modifica ou substitui algumas funções internas e, quando eu incluo os arquivos de cabeçalho apropriados para corrigir os avisos, o GCC gera vários erros. Portanto, corrigir os avisos efetivamente interrompe a compilação.
Se você obteve a fonte como parte de uma distribuição que deve compilar normalmente, os erros podem ser normais. Consulte a documentação para ter certeza.
fonte
Aqui está um código C que produz o erro mencionado acima:
Compilado assim no Fedora 17 Linux de 64 bits com o gcc:
Para fazer o aviso desaparecer, adicione esta declaração na parte superior do arquivo:
fonte
Eu conheci esses avisos em
mempcpy
função. A página de manual diz que esta função é uma extensão GNU e a sinopse mostra:Quando
#define
é adicionado à minha fonte antes do#include
, as declarações para as extensões GNU são tornadas visíveis e os avisos desaparecem.fonte