Подтвердить что ты не робот

C - предупреждение: неявное объявление функции 'printf

Я знаю, что многие подобные вопросы задавались раньше, но я не мог найти что-то, что исправило бы это предупреждение, которое я получаю:

MyIntFunctions.c:19:2: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]

Происходит здесь:

void IntPrint (const void *key)
{
    printf("%d", *(int*)key); // line 19
    printf("\t-->\t");
}

и аналогичное предупреждение:

MyStringFunctions.c:22:2: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]

void StringPrint (const void *key)
{
    printf("%s",(char*)key); //line 22
    printf("\t-->\t");
}

Я действительно хочу понять, что не так, поэтому я больше не буду этого делать в будущем.

4b9b3361

Ответ 1

Вам нужно включить соответствующий заголовок

#include <stdio.h>

Если вы не знаете, какой заголовок стандартная функция определена, функция man page сообщит об этом.

Ответ 2

Вам нужно включить объявление функции printf().

#include <stdio.h>

Ответ 3

предупреждение или ошибка типа IMPLICIT DECLARATION заключается в том, что компилятор ожидает Объявление/Прототип функции.

Это может быть либо заголовочный файл, либо ваша собственная функция. Объявление.

Ответ 4

Мне нужно было включить #include <string.h> для printf(), чтобы не отображать это предупреждение. (GCC 9.2.0)

[[email protected] mybat]$ gcc --version
gcc (GCC) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[[email protected] mybat]$ cat mybat.c 
#include <stdio.h>

int main(int argc, char **argv)
{
    char *basename;

    basename = strrchr(argv[0], '/');
    if (basename == NULL)
        basename = argv[0];
    else
        basename++;

    printf("%s", basename);

    return 0;
}
[[email protected] mybat]$ gcc mybat.c -o mybat
mybat.c: In function ‘main:
mybat.c:7:16: warning: implicit declaration of function ‘strrchr [-Wimplicit-function-declaration]
    7 |     basename = strrchr(argv[0], '/');
      |                ^~~~~~~
mybat.c:7:16: warning: incompatible implicit declaration of built-in function ‘strrchr
mybat.c:2:1: note: include ‘<string.h> or provide a declaration of ‘strrchr
    1 | #include <stdio.h>
  +++ |+#include <string.h>
    2 | 

Затем с изменением:

[[email protected] mybat]$ vim mybat.c 
[[email protected] mybat]$ head -n3 mybat.c 
#include <stdio.h>
#include <string.h>

[[email protected] mybat]$ gcc mybat.c -o mybat
[[email protected] mybat]$ ./mybat