#include <stdio.h>
int main()
{
int a = 4;
int b = 3;
addNumbers(a, b);
}
int addNumbers(int a, int b)
{
return a + b;
}
为什么不能编译,我得到一条消息说隐式声明函数addNumbers()
?“隐式函数声明”是什么意思?
#include <stdio.h>
int main()
{
int a = 4;
int b = 3;
addNumbers(a, b);
}
int addNumbers(int a, int b)
{
return a + b;
}
为什么不能编译,我得到一条消息说隐式声明函数addNumbers()
?“隐式函数声明”是什么意思?
您需要在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()
函数移动到main函数之上或提供原型。之前主要
int addNumbers(int a, int b)
{
return a + b;
}
int main()
{
int a = 4;
int b = 3;
addNumbers(a, b);
}
UPDATE
int addNumbers(int a, int b);
int main()
{
// code of main() here
}
int addNumbers(int a, int b)
{
//code of addNumbers() here
}
看跌的addNumbers:后者做了以下方式
要打印,printf("%i",addNumbers(a, b));
将在上述情况下显示7
。
要么在main()
之前定义该功能,要么在main()
之前提供其原型。
因此,无论这样做:
#include <stdio.h>
int addNumbers(int a, int b)
{ //definition
}
int main()
{ //Code in main
addNumbers(a, b);
}
或该:
int addNumbers(int a, int b);
或:
#include <stdio.h>
int addNumbers(int, int);
int main()
{ //Code in main
addNumbers(a, b);
}
int addNumbers(int a, int b)
{ // definition
}
作为一个方面说明,函数声明通常不是在.h文件中完成的吗? – Powerlord 2010-01-29 14:55:47
@R。 Bemrose:当有多个源文件时,是的。当只有一个源文件时,就像这里一样,该函数应该声明为一个静态函数(因为它不需要从任何其他文件访问,因为只有一个文件需要编译)。 – 2010-01-30 06:01:38
使用它由main()之前或者添加一个原型之前声明函数在main()之前移动整个addNumbers函数。
您可以将整个功能,其中它被称为点以上,或使用功能的原型,就像这样:
#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;
}
行为未定义。根据标准:您必须在使用之前声明该功能。 – 2010-07-20 07:06:13
你需要的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
定义
。
如果您的编译器符合C99标准,则会抛出错误“隐式声明”,因为默认提升在C99标准中已过时。如果您尝试使用C89标准进行编译,这将是允许的。
在C99标准函数原型是必要
由于编译器执行一个又一个线,它看到在函数调用时,它必须有关于函数的主要功能是calling.so的信息我的朋友在使用它之前需要告诉编译器该函数。
我同意声明和定义的事情,但我没有得到任何编译错误与上述code.My 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;
}
您必须在使用前声明该函数。 在处理功能时请记住这4个基本部分。
除了之前的主声明功能的addNumbers,这里是我的2关于C风格美分(不适用于C++): 1)没有参数的函数应该有签名(void) - 因此'int main(void)'; 2)main应该返回C中的值 - 因此'return 0'是强制性的。 – 2010-01-29 10:43:25
所以我怎么能打印它然后,因为当我运行它只是什么都没有显示,我试图从主要返回总和printf(addNumbers(a,b))改变;但无济于事 – bob 2010-01-29 10:45:30
这是另一个问题。此外,我敢肯定,如果您使用stackoverflow.com – sharptooth 2010-01-29 10:47:19