在定义之前立即声明函数的原因

Reasons for declaring a function immediately before defining?

本文关键字:函数 声明 定义      更新时间:2023-10-16

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

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

总的来说,我确实理解在c++中向前声明函数的意义,但是我找不到这种重复的任何理由。有什么理由消除它吗?

如果这是一个早于标准C语言的代码库,那么这段代码可能最初看起来像这样:

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

20世纪90年代的C编译器,即使它们支持原型,也不会从"老式"函数定义中推断出原型,以便在同一文件中使用它下面的代码,所以您经常会在代码中看到这种类型的结构,旨在与标准兼容和遗留编译器进行编译。

现在想象一下,在从那时到现在的某个时刻,有人机械地将所有旧式函数定义转换为原型定义,另一个人机械地将C转换为c++,结果很可能就像你现在拥有的那样。

前导声明不再有任何用途,可以安全地删除