为什么以下代码显示错误?

时间:2015-06-26 15:02:58

标签: c function debugging compiler-errors undefined-reference

#include <stdio.h>

void m();

void n() {
    m();
}

void main() {
    void m() {
        printf("hi");
    }
}

编译时出错

  

&#34;未明确引用m&#34;

显示

。哪个m被提及?

2 个答案:

答案 0 :(得分:3)

首先,请允许我明确声明,

  

<强> Nested functions are not standard C. They are supported as GCC extension.

好的,现在,在您的代码中,m()main()内的嵌套函数。它仅具有main()的块范围。在main()之外的其他函数无法看到m()的存在,也无法直接调用m()m()只能在main()内调用。

在您的情况下,m()n()的调用导致了此问题。即使您将前向声明提供为void m();,链接器也无法找到m()的定义并抛出错误。

解决方案:将m()的定义移到main()之外,然后您可以在任何其他功能中使用它。

另请注意,main()的推荐签名为int main(void)

答案 1 :(得分:2)

正如其他地方所解释的那样,C不支持嵌套函数作为规则(gcc作为扩展,但几乎没有我知道的其他编译器)。

您需要将 list.add(cb.in(r.get(Timeregistration_.id)).value(sq)); 定义移到m之外。您最好在main

使用之前定义m
n