#include <stdio.h>
int main()
{
int a = 4;
int b = 3;
addNumbers(a, b);
}
int addNumbers(int a, int b)
{
return a + b;
}
为什么这不编译,我收到一条消息,说明函数addNumbers()
的隐式声明?
答案 0 :(得分:20)
在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
}
答案 1 :(得分:8)
在main()中调用之前,需要声明该函数。要么在主要之前移动它,要么至少在那里声明它。
此外,您应该在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;
}
答案 2 :(得分:6)
您必须将整个addNumber()
函数移动到main之上或提供原型。后者按以下方式完成:
int addNumbers(int a, int b);
int main()
{
// code of main() here
}
int addNumbers(int a, int b)
{
//code of addNumbers() here
}
答案 3 :(得分:4)
将addNumbers放在main
之前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
。
答案 4 :(得分: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;
}
答案 5 :(得分: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
。
答案 6 :(得分:1)
在使用之前通过在main()之前添加原型来声明函数:
int addNumbers(int a, int b);
或在main()之前移动整个addNumbers函数。
答案 7 :(得分: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;
}
答案 8 :(得分:1)
您必须在使用前声明该功能。 在处理函数时请记住这4个基本部分。
答案 9 :(得分:0)
如果你的编译器是C99标准它会抛出并且错误“隐式声明”,因为默认促销在C99标准中已经过时了。 如果您尝试使用C89标准进行编译,则这是允许的。
在C99中,标准功能原型是必要的
答案 10 :(得分:0)
由于编译器一个接一个地执行一行,当它看到函数调用时,它必须具有关于该函数的信息,而该函数正在调用。所以我的朋友你需要告诉编译器之前的函数你可以使用它。