c - 奇怪的链接情况

标签 c gcc linker header-files

在 irc.freenode.net 上讲了##C 中的链接之后,我去测试我学到的一些概念,并得出了这种情况。

我有这个名为 main.c 的文件:

int main(void) {
    func();

    return 0;
}

还有这个名为 test.c 的文件:

#include <stdio.h>

void func(void) {
    printf("Hello.\n");
}

没有test.h文件。

我这样做:

$ gcc -c main.c
$ gcc -c test.c
$ gcc main.o test.o
$ ./a.out
Hello.
$

那行得通。 gcc 难道不应该在第一次调用时提示不知道在 main.c 文件中调用的函数 func() 吗?我没有在其原型(prototype)或实现中包含任何文件,但 gcc 可以编译目标代码并生成正常的可执行文件。我错过了什么?

谢谢。

最佳答案

打开一些警告,你会痛苦地意识到这些问题。

> gcc -Wall -c main.c
main.c: In function ‘main’:
main.c:2:5: warning: implicit declaration of function ‘func’

默认情况下,C 会假设有关未知函数的事情。好的?可能不会。历史。

gcc -std=c99 也会抛出警告。

关于c - 奇怪的链接情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6429710/

相关文章:

c - 1 = 假和 0 = 真?

c - child 收到 sigstop 后 wait() 不返回

c - 添加 printf 会增加数据段的大小

c++ - VC++ 6 链接器错误

Ubuntu 11.10 上的 c 数学链接器问题

c++ - 无法将 libpcrecpp 链接到 MinGW

c - C 中带有 or 的 if 语句

c - 结构选项错误 : array type has incomplete element type

c - 如何在我的项目中使用 Linux like CONFIG_* 配置?

c - ‘mc’ 在单词 'mcmodel=medium' 中意味着什么?