#include <stdio.h>
void m();
void n() {
m();
}
void main() {
void m() {
printf("hi");
}
}
编译时出错
显示&#34;未明确引用m&#34;
。哪个m
被提及?
答案 0 :(得分:3)
首先,请允许我明确声明,
<强> Nested functions are not standard
C
. They are supported as GCC extension. 强>
好的,现在,在您的代码中,m()
是main()
内的嵌套函数。它仅具有main()
的块范围。在main()
之外的其他函数无法看到m()
的存在,也无法直接调用m()
。 m()
只能在main()
内调用。
在您的情况下,m()
内n()
的调用导致了此问题。即使您将前向声明提供为void m();
,链接器也无法找到m()
的定义并抛出错误。
解决方案:将m()
的定义移到main()
之外,然后您可以在任何其他功能中使用它。
另请注意,main()
的推荐签名为int main(void)
。
答案 1 :(得分:2)
正如其他地方所解释的那样,C不支持嵌套函数作为规则(gcc作为扩展,但几乎没有我知道的其他编译器)。
您需要将 list.add(cb.in(r.get(Timeregistration_.id)).value(sq));
的定义移到m
之外。您最好在main
m
n