2013-05-27 36 views
3

所以在这个另一位巨大的C++代码库,我经常察觉这种风格:在定义之前立即声明函数的原因?

// ... 

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

在一般情况下,我明白什么是的forward declaring C++中的功能点,但是我找不到任何理由这种重复。 是否有任何理由不消除

+4

奇怪的代码库。 – juanchopanza

+0

那么,这是一个传统的老牌,残留的预标准C仍然存在,所以我通常会考虑任何可能的遗留原因。但是,这种情况对我来说似乎太奇怪了。 – ulidtko

+0

这不是某种pythonic骗局吗? – hetepeperfan

回答

5

如果这是早于标准的C代码库,有可能是该代码最初看起来是这样的:

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

20世纪90年代时期的C编译器,即使他们支持的原型,就不会演绎出原型从一个“老式”的函数定义中为它下面的代码在同一个文件中的好处,所以你会经常看到这种类型的代码构造,用于编译符合标准和遗留编译器的代码。

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

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

0

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

相关问题