#include <stdio.h>
void m();
void n() {
m();
}
void main() {
void m() {
printf("hi");
}
}
在编译,错误
“未定义参考到m”
被示出。 这m
被称为?
#include <stdio.h>
void m();
void n() {
m();
}
void main() {
void m() {
printf("hi");
}
}
在编译,错误
“未定义参考到m”
被示出。 这m
被称为?
首先,我要申报清楚,
嵌套函数不是标准
C
。 他们也支持GCC扩展。
好了,现在,在你的代码, m()
里面嵌套函数main()
。 它是具有用于块范围main()
唯一的。 外main()
的其它功能不能看到的存在m()
也不能调用m()
直接。 m()
可以被称为仅内部main()
。
在你的情况下,调用m()
内的n()
导致了问题。 即使你提供的向前声明为void m();
,链接器将无法找到的定义m()
并抛出错误。
解决方案:移动的定义, m()
外main()
那么你可以从任何其他函数中使用它。
还要注意,推荐的签名main()
是int main(void)
。
正如已经在别处解释,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;
}