所以在另一个古老的C ++代码库中,我经常发现这种风格:
// ...
void FooBar::Eggs(int spam);
void FooBar::Eggs(int spam) {
// implementation here
// ...
}
一般来说,我确实理解{C ++中forward declaring函数的含义是什么,但我找不到任何这种复制的理由。有没有理由不消除它?
答案 0 :(得分:5)
如果这是一个早于标准C的代码库,则此代码最初可能如下所示:
#ifdef PROTOTYPES
void FooBar_Eggs(int spam);
#endif
FooBar_Eggs(spam)
int spam;
{
...;
}
20世纪90年代的C编译器,即使它们支持原型,也不会从“旧式”函数定义中推导出一个原型,以便在同一个文件中为它下面的代码带来好处,所以你会经常看到这种类型的在代码中构造,旨在使用符合标准的编译器和旧版编译器进行编译。
现在想象一下,在当时和现在之间的某个时刻,有人将所有旧式函数定义机械地转换为原型定义,而其他人机械地将C转换为C ++,结果看起来很像你所拥有的。
领先声明不再有用,可以安全地删除。
答案 1 :(得分:0)
我认为这是不必要的。函数在定义时声明。 (据我所知)