【发布时间】:2021-05-04 18:59:33
【问题描述】:
在 C 中,当然可以声明和定义函数。这会与来自 C++ 的默认构造函数调用交互,从而产生最令人头疼的解析问题。假设我想声明一个函数foo,定义一个函数bar并创建一个实例t,我可能会错误地写这个(考虑到Python或Java):
T foo();
T bar() {
T t();
}
这不会做我想要的,它将声明一个没有参数的函数t(或者可能是任意多个,因为那里没有写void,不确定)并返回类型T。我会得到一个带有T t; 的T 实例。
为什么甚至允许这种语法?仅在函数内声明函数有什么意义?无论如何,链接器必须在链接时解决这个问题,然后可以在文件范围内声明该函数。是否有一些我遗漏的边缘案例?
【问题讨论】:
-
可能只是因为在函数范围内的这个函数声明在 C 中是允许的(没有最令人头疼的解析歧义)并且 C++ 想要接受大部分 C 语法?
-
@prog-fh:我明白了!所以我的问题应该是首先在 C 中是否允许这样做。
标签: c most-vexing-parse