Что означает "неявное объявление функции"?
#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 основные части при работе с функциями.
- декларация
- Вызов
- Определение
- Вернуть
Я согласен с декларацией и определением, но я не получаю никаких ошибок компиляции с вышеуказанным кодом. Моя версия 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 стандартная функция прототипа необходима
Поскольку компилятор выполняет одну строку за другой, к тому времени, когда он видит вызов функции, он должен иметь информацию о той функции, которую вызывает основная функция. Так что мой друг, вам нужно сообщить компилятору о функции, прежде чем вы сможете используй это.