[英]Why does the following code show an error?
#include <stdio.h>
void m();
void n() {
m();
}
void main() {
void m() {
printf("hi");
}
}
编译时出现错误
“对m的未定义引用”
显示。 指的是哪个m
?
首先,让我明确声明,
OK,现在,在您的代码中, m()
是main()
内部的嵌套函数。 它仅具有main()
块作用域。 在main()
其他函数看不到m()
的存在,也不能直接调用m()
。 m()
只能在main()
内部调用。
在您的情况下,对n()
m()
的调用导致了此问题。 即使您将前向声明提供为void m();
,链接器将无法找到m()
的定义并抛出错误。
解决方案:将m()
的定义移到main()
m()
之外,然后可以从任何其他函数中使用它。
还要注意, main()
的推荐签名是int main(void)
。
正如其他地方所解释的那样,C通常不支持嵌套函数(gcc作为扩展,但据我所知几乎没有其他编译器支持)。
您需要将m
的定义移到main
之外。 最好在n
使用n
之前定义m
:
#include <stdio.h>
void m()
{
printf("hi\n");
}
void n()
{
m();
}
int main( void ) // void main() is not a valid signature for main
{
n(); // call n, which calls m, which prints "hi"
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.