比较
int foo (int n) {
return n;
}
vs
int foo(int);
int foo (int n) {
return n;
}
有没有理由事先在C ++中声明函数原型?我来自JAVA背景,所以我从来没有声明过函数原型,这对我来说有点新鲜。
答案 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。