是否有必要声明函数的原型?

时间:2014-03-05 20:26:04

标签: c++

比较

int foo (int n) {
 return n;
}

vs

int foo(int);

int foo (int n) {
 return n;
}

有没有理由事先在C ++中声明函数原型?我来自JAVA背景,所以我从来没有声明过函数原型,这对我来说有点新鲜。

3 个答案:

答案 0 :(得分:1)

不,如果在调用函数之前被调用函数,则不需要编写原型。编写原型,以便编译器可以理解稍后定义声明的函数。因此,在这种情况下,即使被调用的函数在之后写入而不是调用函数,它也不会引发任何错误。

答案 1 :(得分:1)

任何名称在使用前均应声明。因此,如果您使用函数名称,则应声明它。函数的定义同时也是它的声明。所以没有必要写

int foo(int);

int foo (int n) {
 return n;
}

仅仅定义函数

就足够了
int foo (int n) {
 return n;
}

考虑到编译单元可能包含多个与其定义不同的相同函数的声明。

答案 2 :(得分:1)

如果要使用它,只需要在定义之前声明该函数。

for ex

int foo ();

int main(...)
{
  //I can use foo now 
  int x = foo(): 

}

现在,虽然这个接缝像一个小小的胜利,但是一旦你想要一个共享多个cpp文件的函数,你将最终需要一个更大的区别,因为没有人可以管理100万行源代码文件。

所以现在我有了

foo.h

int Foo();

我现在可以通过包含标题

在任何来源中使用Foo()

main.cpp

#include "foo.h"
int main(..)
{
   //I can use it here 
   Foo(); 
}

bob.cpp

#inlcude "foo.h"
int doSomething()
{
    // and here 
    Foo();
}

我只在foo.cpp中定义它;

首先这是必需的。如果您将定义放在标题中,则会与one definition rule发生冲突。另一个很大的优点是它可以使您的编译时间更快,因为您可以看到是否将此函数更改为模板函数,这将允许您绕过odr。