Моят компилатор (GCC) ми дава предупреждението:
предупреждение: имплицитна декларация на функция
Моля, помогнете ми да разбера защо се появява това.
Използвате функция, за която компилаторът все още не е видял декларация ("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