在定义之前立即声明功能的原因?

时间:2013-05-27 14:26:33

标签: c++ coding-style function-declaration

所以在另一个古老的C ++代码库中,我经常发现这种风格:

// ...

void FooBar::Eggs(int spam);
void FooBar::Eggs(int spam) {
    // implementation here
    // ...
}

一般来说,我确实理解{C ++中forward declaring函数的含义是什么,但我找不到任何这种复制的理由。有没有理由消除它?

2 个答案:

答案 0 :(得分:5)

如果这是一个早于标准C的代码库,则此代码最初可能如下所示:

#ifdef PROTOTYPES
void FooBar_Eggs(int spam);
#endif
FooBar_Eggs(spam)
     int spam;
{
    ...;
}
20世纪90年代的C编译器,即使它们支持原型,也不会从“旧式”函数定义中推导出一个原型,以便在同一个文件中为它下面的代码带来好处,所以你会经常看到这种类型的在代码中构造,旨在使用符合标准的编译器和旧版编译器进行编译。

现在想象一下,在当时和现在之间的某个时刻,有人将所有旧式函数定义机械地转换为原型定义,而其他人机械地将C转换为C ++,结果看起来很像你所拥有的。

领先声明不再有用,可以安全地删除。

答案 1 :(得分:0)

我认为这是不必要的。函数在定义时声明。 (据我所知)