我的意思是,即使我在函数调用之前定义了函数,是否需要有一个函数原型? 我尝试了一个带有定义b4调用的程序,它起作用了。但是在C ++中,Herbert schildt说C ++需要全功能原型设计。所以很困惑。 那么,C ++真的需要全功能原型设计吗?
答案 0 :(得分:6)
函数定义也是函数声明(即原型)。因此,如果您在调用它之前定义该函数,那么一切都将是hunkydory。我强烈建议不尝试从Herb Schildt的作品中学习C ++。
答案 1 :(得分:1)
函数原型或函数接口是a的声明 指定函数名称和类型签名的函数(arity, 数据类型的参数和返回类型),但省略了该功能 体
函数原型仅指定其(函数)接口(I / O)。
函数的原型也称为函数的签名。
如果在实际函数定义之前必须对代码部分中的函数进行调用或引用,那么函数原型是强制性的。
功能原型可以被识别出来"或者从它的定义中得到,因此如果在实际定义之前没有对函数进行调用,则声明函数原型不是强制性的。
答案 2 :(得分:0)
我的意思是,即使我在函数调用之前定义了函数,是否需要有函数原型?
不,这并不意味着。
那么,C ++真的需要全功能原型设计吗?
是的。编译器需要先查看函数的声明才能使用它:
void foo(int i);
或者,您可以提供完整(内联)定义
inline void foo(int i) {
// do something
}
答案 3 :(得分:-1)
考虑到这个问题,我会假设你处于初级水平。首先,你应该从更好的书中学习。
将编译器视为一个聪明的人,他会读取您的程序并将其转换为机器语言。
当编译器开始编译程序时,它可能会遇到函数调用,例如:foo();
现在,它必须使控件跳转到函数的地址,以便在运行期间执行所需的指令,但编译器不知道函数的内容或位置!
为编译器提供引用有助于编译代码。
原型是这样的引用,你也可以在任何函数调用之前定义一个函数,它仍然可以工作。
除了技术原因,原型使代码在大型项目中更加清洁。
否则,您只需滚动浏览函数定义,而不知道函数正在做什么。记住,你也像人类编译器一样!
我注意到的一个常见错误:通常人们反抗这个想法并在顶部定义他们的功能。虽然,当从函数调用另一个函数时,可能会出现问题。
int function_1()
{
return function_2();
}
int function_2()
{
return function_1();
}
这里没有功能定义的安排。原型设计要好得多。
假设:显然有一些语句可以打破无限循环和返回值,这只是为了说明这个概念。