Ο μεταγλωττιστής μου (GCC) μου δίνει την προειδοποίηση:
warning: implicit declaration of function
Παρακαλώ βοηθήστε με να καταλάβω γιατί συμβαίνει αυτό.
Χρησιμοποιείτε μια συνάρτηση για την οποία ο μεταγλωττιστής δεν έχει δει ακόμα μια δήλωση ("prototype").
Για παράδειγμα:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Πρέπει να δηλώσετε τη συνάρτησή σας πριν από την main, όπως αυτή, είτε απευθείας είτε σε μια επικεφαλίδα:
int fun(int x, char *p);
Ο σωστός τρόπος είναι να δηλώσετε το πρωτότυπο της συνάρτησης στην επικεφαλίδα.
#ifndef MAIN_H
#define MAIN_H
int some_main(const char *name);
#endif
main.c
#include "main.h"
int main()
{
some_main("Hello, World\n");
}
int some_main(const char *name)
{
printf("%s", name);
}
Ενα εναλλακτικό με ένα αρχείο (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Αν έχετε ορίσει τις σωστές επικεφαλίδες &- χρησιμοποιείτε μια βιβλιοθήκη που δεν είναι GlibC
(όπως η Musl C), ο gcc
θα πετάξει επίσης error: implicit declaration of function
όταν συναντήσετε επεκτάσεις GNU όπως η malloc_trim
.
Η λύση είναι να τυλίξετε την επέκταση & στην επικεφαλίδα:
#if defined (__GLIBC__)
malloc_trim(0);
#endif