所以在这个另一位巨大的C++代码库,我经常察觉这种风格:在定义之前立即声明函数的原因?
// ...
void FooBar::Eggs(int spam);
void FooBar::Eggs(int spam) {
// implementation here
// ...
}
在一般情况下,我明白什么是的forward declaring C++中的功能点,但是我找不到任何理由这种重复。 是否有任何理由不消除?
所以在这个另一位巨大的C++代码库,我经常察觉这种风格:在定义之前立即声明函数的原因?
// ...
void FooBar::Eggs(int spam);
void FooBar::Eggs(int spam) {
// implementation here
// ...
}
在一般情况下,我明白什么是的forward declaring C++中的功能点,但是我找不到任何理由这种重复。 是否有任何理由不消除?
如果这是早于标准的C代码库,有可能是该代码最初看起来是这样的:
#ifdef PROTOTYPES
void FooBar_Eggs(int spam);
#endif
FooBar_Eggs(spam)
int spam;
{
...;
}
20世纪90年代时期的C编译器,即使他们支持的原型,就不会演绎出原型从一个“老式”的函数定义中为它下面的代码在同一个文件中的好处,所以你会经常看到这种类型的代码构造,用于编译符合标准和遗留编译器的代码。
现在想象一下,在现在和现在之间的某个时间,某人将所有旧式函数定义机械地转换为原型定义,并且其他人将C机械转换为C++,并且结果可能看起来像您所拥有的。
领先声明不再有用,可以安全地删除。
我认为这是没有必要的。函数在定义时声明。 (据我所知)
奇怪的代码库。 – juanchopanza
那么,这是一个传统的老牌,残留的预标准C仍然存在,所以我通常会考虑任何可能的遗留原因。但是,这种情况对我来说似乎太奇怪了。 – ulidtko
这不是某种pythonic骗局吗? – hetepeperfan