在没有声明的情况下调用另一个文件中的函数不会产生编译错误

标签 c

<分区>

//File a.c
void main()
{
    test();
}

//File b.c
#include<stdio.h>
void test()
{
    printf("Hi, I am test.");
}

我使用“gcc a.c b.c”编译这段代码。然后我运行“a.out”并输出“嗨,我正在测试”。我的问题是在 a.c 文件中没有 test() 声明,那么为什么代码可以编译?

最佳答案

默认情况下,C 中的函数是 extern,这意味着链接器甚至可以将文件 a 中的函数连接到文件 b如果没有程序员编写的#includeextern

我的 gcc 编译它时出现了这个警告:warning: implicit declaration of function... 意思是,通过查看 test(); 编译器猜测什么 test 是,并且继续。如果您将 test 定义为 static 那将会失败,因为 static 与默认的 extern

我认为您应该注意的一件事是,此隐式声明 还使编译器猜测 test 的返回类型,并且它会认为类型是 int。这可能会导致问题。

关于在没有声明的情况下调用另一个文件中的函数不会产生编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45399030/

相关文章:

c - 修改通过引用传递的变量与从函数返回它

c - 读取返回 0 字节

c++ - 此人如何使用 Microsoft Paint 编码 "Hello World"?

c - 我无法在C中获取数组长度

更改 argp 上的默认输出流

c - 使用函数的程序说明

c - vSphere API 和自动化虚拟机管理

C 枚举的 Java 表示

c++ - Visual Studio 生成的二进制文件

Eclipse 中的 C/C++ 运行/调试配置