在定义函数之前立即声明的原因是什么?

3

所以在另一个旧的庞大的C++代码库中,我经常看到这种风格:

// ...

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

总的来说,我了解在C++中使用前向声明函数的意义,但是我找不到这种重复的合理性。是否有任何理由消除它呢?


嗯,这是一个传统老旧的代码,仍然保留着一些早期标准 C 的痕迹,所以我通常会考虑任何可能的遗留原因。但是,这种情况对我来说似乎过于奇怪了。 - ulidtko
这不是某种 Pythonic 的骗局吗? - hetepeperfan
@hetepeperfan,嗯...Pythonic是什么。 - ulidtko
我建议您启用_-pedantic_,但我担心这会导致宇宙崩溃。 - Captain Obvlious
@ulidtko,我指的是http://docs.python.org/2/tutorial/introduction.html#lists,鼓励在您的代码中引用蒙提·派森。请参见那里的列表示例。 - hetepeperfan
2个回答

5

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

#ifdef PROTOTYPES
void FooBar_Eggs(int spam);
#endif
FooBar_Eggs(spam)
     int spam;
{
    ...;
}

在20世纪90年代,即使支持原型,C编译器也不会从“旧式”函数定义中推导出原型,以使得在同一文件中下面的代码受益。因此,你经常会在旨在与标准兼容和遗留编译器编译的代码中看到这种构造方式。
现在想象一下,在那时和现在之间的某个时间点上,有人机械地将所有旧式函数定义转换为带原型的定义,而另一个人则将C转换为C++,结果可能看起来就像你所拥有的那样。
前导声明不再有任何作用,可以安全地删除。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接