gpt4 book ai didi

C - 链接过程误解

转载 作者:行者123 更新时间:2023-12-02 08:26:00 24 4
gpt4 key购买 nike

假设我有一个带有函数声明的头文件:

测试.h:

int func(int a);

主.c:

#include "test.h"
int main {
return func(5);
}

test.c(不包含在 test.h 中):

int func(int x) {
return x*x;
}

我明白为什么这两个文件都能编译,但我认为因为 test.c 没有头文件的包含,链接器将无法识别这是实现,但是确实如此。

  • 那么,为什么会这样?
  • 在我应该包含到头文件中时是否有任何“规则”?

最佳答案

当链接发生时,头文件早就消失了。链接器处理所谓的目标文件。目标文件是从每个翻译单元编译而来的,即在我们的例子中是 C 文件。未在给定目标文件中定义的符号将由链接器解析,链接器查看所有其他目标文件并尝试解析该符号。在我们的例子中,test.c 被编译成 test.o,并定义了一个符号:funcmain.c被编译成main.o,其中定义了main符号,并引用了一个外部符号func。然后 test.omain.o 被送入链接器(从 main 开始)将解析 func来自 test.o

关于C - 链接过程误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32119682/

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