C ++中的函数原型是强制性的吗?

时间:2017-07-09 16:57:15

标签: c++

我的意思是,即使我在函数调用之前定义了函数,是否需要有一个函数原型? 我尝试了一个带有定义b4调用的程序,它起作用了。但是在C ++中,Herbert schildt说C ++需要全功能原型设计。所以很困惑。 那么,C ++真的需要全功能原型设计吗?

4 个答案:

答案 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();
}

这里没有功能定义的安排。原型设计要好得多。

假设:显然有一些语句可以打破无限循环和返回值,这只是为了说明这个概念。