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

标签 c function debugging compiler-errors undefined-reference

#include <stdio.h>

void m();

void n() {
    m();
}

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

编译时出错

"undefined reference to m"

显示。指的是哪个 m

最佳答案

首先声明一下,

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

好的,现在,在您的代码中,m()main() 中的嵌套函数。它仅具有 main() 的 block 作用域。 main() 之外的其他函数看不到m() 的存在,也不能直接调用m()m() 只能在 main() 内部调用。

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

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

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

关于c - 为什么下面的代码会显示错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076470/

相关文章:

c - 为什么这个 GNU C 可变参数函数会返回一个巨大的数字?

function - 在 Inno Setup 中实现脚本常量时为 "Identifier Expected"或 "Invalid Prototype"

c - 如何让 gcc 将包含函数调用的表达式识别为常量?

debugging - 如何在IIS上调试URL重写配置

java - 使用 Intellij 调试远程 java 应用程序

perl - 如何在调试器下运行perl代码块?

c - 使用宏获取结构体中的数组长度

c - 为什么在尝试释放字符串数组时出现此错误

c - 如何在C程序中多次从stdin读取数据

javascript - 使 'this' 等于 Javascript 函数赋值中的调用者