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

Что означает "неявное объявление функции"?

#include <stdio.h>

int main()
{
    int a = 4;
    int b = 3;
    addNumbers(a, b);
}

int addNumbers(int a, int b)
{
    return a + b;
}

Почему это не компилируется, я получаю сообщение о неявном объявлении функции addNumbers()?

4b9b3361

Ответ 1

Определить функцию перед main() или предоставить ее прототип до main().

Итак, сделайте так:

#include <stdio.h>

int addNumbers(int a, int b)
{ //definition
}

int main()
{ //Code in main
  addNumbers(a, b);
}

или это:

#include <stdio.h>

int addNumbers(int, int);
int main()
{ //Code in main
  addNumbers(a, b);
}

int addNumbers(int a, int b)
{ // definition
}

Ответ 2

Вам нужно объявить функцию до того, как вы ее вызове в main(). Либо переместите его перед основным, либо, по крайней мере, объявите его там. Кроме того, вы должны попробовать добавить return 0 в конце основной функции, поскольку он должен возвращать int.

#include <stdio.h>

int addNumbers(int a, int b)
{
    return a + b;
}

int main()
{
    int a = 4;
    int b = 3;
    addNumbers(a, b);
    return 0;
}

Ответ 3

Вам нужно либо переместить всю функцию addNumber() выше основного, либо предоставить прототип. Последнее делается следующим образом:

int addNumbers(int a, int b);

int main()
{
//    code of main() here
}

int addNumbers(int a, int b)
{
//code of addNumbers() here
}

Ответ 4

Поместите addNumbers перед основным

int addNumbers(int a, int b)
{
    return a + b;
}

int main()
{
    int a = 4;
    int b = 3;

    addNumbers(a, b);
}

UPDATE

Чтобы распечатать его, printf("%i",addNumbers(a, b)); отобразит 7 в приведенном выше случае.

Ответ 5

Вы можете переместить всю функцию выше точки ее вызова или использовать прототип функции, например:

#include <stdio.h>

int addNumbers(int a, int b); // function prototype

int main()
{
    int a = 4;
    int b = 3;
    addNumbers(a, b);
}

int addNumbers(int a, int b)
{
    return a + b;
}

Ответ 6

Вам понадобится переднее объявление функции addNumbers или его определение, перемещенное до первого использования:

// 2161304
#include <stdio.h>

// forward declaration
int addNumbers(int a, int b);

int main()
{
    int a = 4;
    int b = 3;
    addNumbers(a, b);
}

// alternatively move this up before main ...
int addNumbers(int a, int b)
{
    return a + b;
}

Относительно main и return:

Программы будут без компиляции. Подписи основного значения, определенные стандартом, следующие:

int main(void)
int main(int argc, char **argv)

Существует три переносных значения возврата:

0, EXIT_SUCCESS, EXIT_FAILURE

которые определены в stdlib.h.

Ответ 7

Объявите функцию перед ее использованием путем добавления прототипа перед main():

int addNumbers(int a, int b);

или переместите всю функцию addNumbers до main().

Ответ 8

Я согласен с объявлением и определением, но я не получаю ошибок компиляции с указанным выше кодом. Моя версия gcc - "4.4.1-4ubuntu9". Все идеи.

Я сделал небольшую модификацию для проверки кода.

 #include <stdio.h>

int main()
{
    int a = 4;
    int b = 3;
    printf("%d", addNumbers(a, b));   // Printf added.
}

int addNumbers(int a, int b)
{
    return a + b;
}

Ответ 9

если ваш компилятор является стандартом C99, он выдает и "неявное объявление" ошибки, поскольку, поскольку продвижение по умолчанию устарело в стандарте C99. если вы попытаетесь скомпилировать стандарт C89, это будет допустимо.

В C99 необходим стандартный прототип функции

Ответ 10

Поскольку компилятор выполняет одну строку за другой, к моменту, когда он видит вызов функции, он должен иметь информацию об этой функции, которую вызывает главная функция. Мой друг должен сообщить компилятору о функции до вы можете когда-либо использовать его.

Ответ 11

Вы должны объявить функцию перед использованием. Помните эти четыре основные части при работе с функциями.

  • Декларация
  • Вызов
  • Определение
  • Возврат