0

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

我们可以在函数内部有函数吗?

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

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

#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);
}
4

1 回答 1

2

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

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

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

必须了解的是,C++ 最初是基于 C 语言构建的,在标准化时与 C 的兼容性是一个高度优先事项(我相信现在仍然如此)。所以,我相当有信心地说函数(和全局变量)声明在 C++ 的块范围内是允许的,因为它们在 C 中是允许的。

为什么在 C 中允许函数声明,您也可能会问。据我所知,在现代 C 中,块作用域函数声明的使用已经下降,这是标准化前的遗留物。我们大概可以将语言传承延续到B语言。我自己对 B 了解不多,但是维基百科中的示例代码恰好有一个块作用域函数声明。

于 2018-08-13T14:39:12.867 回答