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

#include <stdio.h>

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

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

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

11 ответов

Либо определите функцию перед 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
}

Вам нужно объявить функцию, прежде чем вызывать ее в 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;
}

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

int addNumbers(int a, int b);

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

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

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

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

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

    addNumbers(a, b);
}

ОБНОВЛЕНИЕ:

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

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

#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;
}

Вам понадобится предварительная декларация 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,

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

  1. декларация
  2. Вызов
  3. Определение
  4. Вернуть

Я согласен с декларацией и определением, но я не получаю никаких ошибок компиляции с вышеуказанным кодом. Моя версия 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;
}

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

int addNumbers(int a, int b);

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

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

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

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

Другие вопросы по тегам