我有点困惑,我多年来一直在做C,我又一次开始做。我不清楚的一件事是两个相互调用的文件的关系,例如:
testa.c :
int main (void)
{
callTheOtherFunction();
return 0;
}
和另一个文件
testb.c
callTheOtherFunction(){
//do some stuff
}
现在我的" makefile"看起来像
gcc -o test ./testa.c ./testb.c
这是什么意思? callTheOtherFunction
现在是testa.c的一部分,就像这两个文件已合并一样吗?或者它与继承有关? callTheOtherFunction
现在是一个全局函数,或者你会怎么称呼它?
我需要从中绘制UML图表,这就是为什么我需要该案例的表达式。
答案 0 :(得分:3)
源文件从不"合并"。发生的事情是,在编译阶段,将生成两个目标文件 - 每个源文件一个,稍后在链接阶段,两个目标文件将链接(并且还与一些隐式系统库链接),生成可执行文件。
答案 1 :(得分:2)
编译器将两个文件编译为目标代码,然后链接器将从目标文件生成单个可执行文件。正如你所说的那样,就像这两个文件已被合并。
callTheOtherFunction
可以从任何地方访问(我想你会称之为全局函数),因为你没有标记它的定义static
。
作为旁注,您可能应该从该编译中收到编译器警告,因为您在 testa.c 中没有声明callTheOtherFunction
。