首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么下面的代码会显示错误?

为什么下面的代码会显示错误?
EN

Stack Overflow用户
提问于 2015-06-26 15:02:57
回答 2查看 543关注 0票数 1
代码语言:javascript
运行
复制
#include <stdio.h>

void m();

void n() {
    m();
}

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

关于编译,错误

“对m的未定义的引用”

会显示出来。指的是哪个m

EN

回答 2

Stack Overflow用户

发布于 2015-06-26 15:05:33

首先,让我明确声明,

. They are supported as GCC extension.**

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

在您的示例中,调用m() In n()是导致问题的原因。即使您将前向声明提供为void m();,链接器也无法找到m()的定义并抛出错误。

解决方案:m()的定义移到main()之外,然后可以从任何其他函数中使用它。

还请注意,推荐的main()签名是int main(void)

票数 3
EN

Stack Overflow用户

发布于 2015-06-26 15:15:38

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

您需要将m的定义移出main之外。最好在mn使用之前定义它

代码语言:javascript
运行
复制
#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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31076470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档