联动期间的外部功能?

use*_*069 5 c linux

我有这个奇怪的事情:

在file1.c中有

extern void foo(int x, int y);
..
..

int tmp = foo(1,2);
Run Code Online (Sandbox Code Playgroud)

在项目中,我只能找到这个foo():

在file2.c中:

int foo(int x, int y, int z)
{
....
}
Run Code Online (Sandbox Code Playgroud)

在file2.h中:

int foo(int x, int y, int z);
Run Code Online (Sandbox Code Playgroud)

file2.h中没有包含file2.h(这就是为什么谁用extern写的,我猜).

这个项目编译得很好,我认为这是因为在file1.c中foo()只会在链接期间查找,我是对的吗?

但我真正的问题是:为什么联系很紧张?毕竟,没有像foo这样的函数有2个参数....而且我在c ..所以没有超载..

发生什么了 ?

axi*_*iac 7

因为没有重载,C编译器不会修饰函数名称.链接器在file2.c对函数的引用foofile1.c找到并在其中找到一个函数foo.它无法知道它们的参数列表不匹配并乐于使用它们.

当然,当函数foo运行时,值为zgarbage,并且程序的行为从那时起变得不可预测.