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

17
#include <stdio.h>

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

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

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

    
задан bob 29.01.2010 в 11:38
источник

11 ответов

19

Определить функцию до 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
}
    
ответ дан Prasoon Saurav 29.01.2010 в 11:41
источник
8

Вам нужно объявить функцию до того, как вы ее вызове в 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;
}
    
ответ дан rui 29.01.2010 в 11:39
источник
6

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

int addNumbers(int a, int b);

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

int addNumbers(int a, int b)
{
//code of addNumbers() here
}
    
ответ дан sharptooth 29.01.2010 в 11:40
источник
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 в приведенном выше случае.

    
ответ дан YOU 29.01.2010 в 11:41
источник
2

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

#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;
}
    
ответ дан sergiom 29.01.2010 в 11:45
источник
2

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

    
ответ дан miku 29.01.2010 в 11:45
источник
1

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

int addNumbers(int a, int b);

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

    
ответ дан Mark Tolonen 29.01.2010 в 11:45
источник
1

Я согласен с объявлением и определением, но я не получаю ошибок компиляции с указанным выше кодом. Моя версия 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;
}
    
ответ дан Srinivas Reddy Thatiparthy 29.01.2010 в 15:49
источник
0

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

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

    
ответ дан C Learner 29.01.2010 в 13:05
источник
0

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

    
ответ дан Vijay 29.01.2010 в 13:31
источник
0

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

  1. Декларация
  2. Вызов
  3. Определение
  4. Возврат
ответ дан Chankey Pathak 20.07.2010 в 06:51
источник