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

时间:2018-08-13 13:43:44

标签: c++ function function-declaration 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);
}

1 个答案:

答案 0 :(得分:2)

  

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

因为标准是这样说的(或没有明确禁止这样做)。旁注:块范围内的全局变量声明也是如此。

您可能会问,为什么标准委员会没有禁止它。并未记录该标准的每个规则的所有基本原理,尤其是缺乏假设性规则的文档,但是在这种情况下,我可能可以推测。

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

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