为什么我们不能在main函数中定义函数?

时间:2016-07-18 06:52:09

标签: c

在以下程序中,我尝试调用函数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");
    }
}

3 个答案:

答案 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)

mmain内定义。在标准C中,这是不允许的(您无法在另一个函数中定义函数)。

某些编译器(例如gcc)允许它作为扩展。但是,该函数是 local ,即m仅存在于main内,并且无法从外部看到。类似地,函数中定义的变量对于该函数是局部的,并且不能从外部看到。

您在顶部的void m();声明声称存在名为m的(全局)函数,但事实并非如此。这就是你得到链接器错误的原因。

答案 2 :(得分:0)

m()方法之外的main()的函数声明移动。