Mój kompilator (GCC) ostrzega mnie:
ostrzeżenie: niejawna deklaracja funkcji
Pomóż mi zrozumieć, dlaczego to nadchodzi.
c
compiler-warnings
Angus
źródło
źródło
Odpowiedzi:
Używasz funkcji, dla której kompilator nie widział jeszcze deklaracji („ prototypu ”).
Na przykład:
Musisz zadeklarować swoją funkcję przed main, tak jak to, bezpośrednio lub w nagłówku:
źródło
Właściwym sposobem jest zadeklarowanie prototypu funkcji w nagłówku.
Przykład
main.h
main.c
Alternatywnie z jednym plikiem (main.c)
źródło
Kiedy wykonujesz #include w main.c, umieść odniesienie #include do pliku zawierającego funkcję, do której się odwołuje, na górze listy dołączeń. np. Powiedzmy, że to main.c, a twoja funkcja, o której mowa, znajduje się w „SSD1306_LCD.h”
Powyższe nie spowoduje wygenerowania błędu „niejawnej deklaracji funkcji”, ale poniżej -
Dokładnie ta sama lista #include, po prostu inna kolejność.
Cóż, zrobiło to dla mnie.
źródło
Kiedy go dostaniesz
error: implicit declaration of function
, powinien również wyświetlić funkcję przestępcy. Często ten błąd występuje z powodu zapomnianego lub brakującego pliku nagłówka, więc w wierszu polecenia możesz wpisaćman 2 functionname
i spojrzeć naSYNOPSIS
sekcję u góry, ponieważ ta sekcja będzie zawierać listę plików nagłówka, które należy dołączyć. Lub spróbuj http://linux.die.net/man/ To są strony man online, do których prowadzą hiperłącza i są łatwe do przeszukiwania. Funkcje są często definiowane w plikach nagłówków, w tym wszelkie wymagane pliki nagłówków są często odpowiedzią. Jak powiedział cnicutar,źródło
Jeśli masz zdefiniowane poprawne nagłówki i korzystasz z
GlibC
biblioteki innej niż biblioteka (np. Musl C ),gcc
to również wyrzucą,error: implicit declaration of function
gdy rozszerzenia GNU, takie jakmalloc_trim
napotkane są .Rozwiązaniem jest zawinięcie rozszerzenia i nagłówka :
źródło
Musisz zadeklarować żądaną funkcję przed funkcją główną :
źródło
Myślę, że na pytanie nie ma 100% odpowiedzi. Szukałem problemu z brakującym typof (), który jest dyrektywą czasu kompilacji.
Poniższe linki rzucą światło na sytuację:
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Typeof.html
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Alternate-Ke words.html#Alternate-Ke words
od przymusu spróbuj użyć
__typeof__()
zamiast tego.gcc ... -Dtypeof=__typeof__ ...
Może również pomóc.źródło