C++:为什么在另一个函数中允许函数声明而不是函数定义?

C++: Why does function declaration is allowed inside another function but not function definition?

我查看了以下问题以检查是否可以在函数内定义函数。

Can we have functions inside functions?

已接受的答案是“否”。我试过了,得到了同样的结果。

但是当我尝试编译下面的代码(仅声明)时,它确实可以编译。 我不太确定为什么允许这样做。

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    int a, *b, f(int c); //trying out multiple name declaration
    int f(int c);
}

C++: Why does function declaration is allowed inside another function but not function definition?

因为标准是这么说的(或者没有明确禁止)。旁注:同样适用于块范围内的全局变量声明。

为什么标准委员会不禁止它,您可能会问。并非标准的每条规则的所有基本原理,尤其是缺乏假设规则,都被记录在案,但在这种情况下我可以推测。

必须理解的是,C++ 最初是建立在 C 语言之上的,在标准化时与 C 的兼容性是一个高优先级(我相信现在仍然如此)。因此,我非常有信心地说函数(和全局变量)声明在 C++ 的块范围内是允许的,因为它们在 C 中是允许的。

为什么 C 中允许函数声明,您可能也会问。据我所知,块作用域函数声明的使用在现代 C 语言中已经减少,它是标准化前时代的遗留物。我们大概可以把语言的传承延续到B语言。我自己对 B 不太了解,但是 example code in wikipedia 恰好有一个块作用域函数声明。