我查看了以下问题,以检查是否可以在函数中定义函数。
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);
}
答案 0 :(得分:2)
C ++:为什么在另一个函数中允许函数声明,但在函数定义中不允许?
因为标准是这样说的(或没有明确禁止这样做)。旁注:块范围内的全局变量声明也是如此。
您可能会问,为什么标准委员会没有禁止它。并未记录该标准的每个规则的所有基本原理,尤其是缺乏假设性规则的文档,但是在这种情况下,我可能可以推测。
必须理解,C ++最初是建立在C语言上的,在标准化时,与C的兼容性是当务之急(我相信仍然如此)。因此,我非常有信心地说,在C ++中,在块范围内允许使用函数(和全局变量)声明,因为在C中是允许的。
为什么在C中允许使用函数声明,您也可能会问。据我所知,在现代C语言中,块作用域函数声明的使用有所减少,这是标准化前的遗物。我们可能可以将语言传统延续到B语言。我对B自己了解不多,但是example code in wikipedia恰好有一个块范围函数声明。