Что означает «неявное объявление функции»? - PullRequest
19 голосов
/ 29 января 2010
#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 ]

20 голосов
/ 29 января 2010

Либо определите функцию до 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
}
8 голосов
/ 29 января 2010

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

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

int addNumbers(int a, int b);

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

int addNumbers(int a, int b)
{
//code of addNumbers() here
}
4 голосов
/ 29 января 2010

Поместите 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 в указанном выше случае.

2 голосов
/ 29 января 2010

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

2 голосов
/ 29 января 2010

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

#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;
}
1 голос
/ 20 июля 2010

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

  1. Декларация
  2. Вызов
  3. Определение
  4. Возвращение
1 голос
/ 29 января 2010

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

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

int addNumbers(int a, int b);

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

0 голосов
/ 29 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...