#include <stdio.h>
void m();
void n() {
m();
}
void main() {
void m() {
printf("hi");
}
}
关于编译,错误
“对m的未定义的引用”
会显示出来。指的是哪个m
?
发布于 2015-06-26 15:05:33
首先,让我明确声明,
好的,现在,在您的代码中,m()
是main()
中的一个嵌套函数。它只有main()
的块范围。在main()
之外,其他函数不能看到m()
的存在,也不能直接调用m()
。m()
只能在main()
中调用。
在您的示例中,调用m()
In n()
是导致问题的原因。即使您将前向声明提供为void m();
,链接器也无法找到m()
的定义并抛出错误。
解决方案:将m()
的定义移到main()
之外,然后可以从任何其他函数中使用它。
还请注意,推荐的main()
签名是int main(void)
。
发布于 2015-06-26 15:15:38
正如其他地方所解释的,C不支持嵌套函数(gcc这样做是作为扩展,但据我所知,几乎没有其他编译器)。
您需要将m
的定义移出main
之外。最好在m
被n
使用之前定义它
#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;
}
https://stackoverflow.com/questions/31076470
复制相似问题