链接和使用头文件有什么区别?

cpr*_*100 -3 c linker compilation

例如,链接两个文件有什么区别

gcc -c func.c 
gcc -c main.c 
gcc func.o main.o -o main 
Run Code Online (Sandbox Code Playgroud)

并使用头文件

#include func.h

int main{
....
.. 
}
Run Code Online (Sandbox Code Playgroud)

如果他们似乎完成了同一件事?

Ste*_*mit 5

他们不会“完成同一件事”。他们完成同一件事的互补部分。通常,您必须同时做这两项:仅做一项或另一项是完全不够的。

这是一个不完美的类比:假设您想要在房子上加个东西。在项目开始时,您要与建筑商签订合同,指定添加的大小和完成的名称。在项目结束时,您在支票上签名,以支付建造者的工作费用。签合同和签支票有什么区别?如果两者都做同样的事情,那么为什么您必须同时做这两个事情,也就是让您成为新成员呢?

包含标头就像(签订合同)一样。当您说时#include <math.h>,您说的是:“嘿,编译器,有一些数学函数sqrt()。Like接受a double并返回a double。因此,如果我编写int x = sqrt(144),请确保在将数字传递intdouble之前进行从到的转换sqrt,并确保您可以先进行从double到的转换,然后int再将结果分配给x。”

与图书馆建立链接就像(在某种程度上)支付账单一样。(实际上,老实说,这几乎不像是付账单,而是要忍受。)当您-lm在命令行末尾时,您会说:“嘿,编译器,我们同意的那些数学函数,在合同中指定了详细信息<math.h>的人,我一直在打电话的人,现在我要付钱,这就是这些功能的实际位置。”