gpt4 book ai didi

c - 链接期间的外部函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:33:44 25 4
gpt4 key购买 nike

我的问题是这个问题的延续: extern function during linkage?

我现在在 file2.c 中尝试:

extern int foo(void);

我调用

foo(1,2,3);

现在,我得到一个编译错误,里面的参数太多了 foo(1,2,3);

为什么会这样?我们刚才说了在链接期间寻找外部函数,并且在那个阶段没有考虑参数...

最佳答案

extern functions are looked for during linkage and that in that stage there's no consideration regarding the parameters.

完全正确。但是,您在编译阶段遇到错误,而不是在链接阶段。您向编译器 promise 有一个函数 foo 不带参数,然后您调用带有三个参数的 foo。编译器不接受,并报告错误。

如果您使用零参数单独编译 foo 并使用采用三个参数的不匹配原型(prototype)调用 foo ,则链接器会出现忽略参数的问题。这是未定义的行为。

实现.c

void foo() {}

主.c

void foo(int,int,int);
int main(int argc, char *argv[]) {
foo(1, 2, 3);
return 0;
}

如果你编译上面的代码,它会链接,因为你通过给它一个错误的原型(prototype)来欺骗编译器,而链接器不知道更好。

关于c - 链接期间的外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27172725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com