在以下程序中,我尝试调用函数n()
和n()
内部,尝试调用m()
函数中定义的main
函数,但是我编译,我得到以下错误:
In function `n': (.text+0xa): undefined reference to `m' error: ld returned 1 exit status
为什么会出错?请解释一下。
代码在这里:
#include <stdio.h>
void m();
void n()
{
m();
}
void main()
{
n();
void m()
{
printf("hi");
}
}
答案 0 :(得分:5)
您无法在标准C中的其他函数范围内实现函数。将m()
的实现移出主文件。
您发布的代码根本不应该编译;但是,您得到的错误是因为链接器ld
无法找到m
的实现。可以使用该函数,因为声明它,但实现缺失,因此无法链接。
另请注意,您的main
函数应返回int
类型的值。使用void
将使程序返回一个任意值,操作系统/ shell无法从中判断执行是否成功。
#include <stdio.h>
void m();
void n() {
m();
}
int main() {
n();
return 0;
}
void m() {
printf("hi");
}
答案 1 :(得分:3)
m
在main
内定义。在标准C中,这是不允许的(您无法在另一个函数中定义函数)。
某些编译器(例如gcc)允许它作为扩展。但是,该函数是 local ,即m
仅存在于main
内,并且无法从外部看到。类似地,函数中定义的变量对于该函数是局部的,并且不能从外部看到。
您在顶部的void m();
声明声称存在名为m
的(全局)函数,但事实并非如此。这就是你得到链接器错误的原因。
答案 2 :(得分:0)
将m()
方法之外的main()
的函数声明移动。