在 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/