假设我们有 2 个源文件:
主文件:
#include <stdio.h>
#define i 2
int main(){
printf("sum(%d) = %d", i, sum(i));
return 0;
}
总和.c:
int sum(int i){
int a, sum;
for(a = 0, sum = 0; a < i; a++)
sum += a;
return sum;
}
如果我编译它们使用
gcc main.c sum.c
我会得到一个有效的可执行文件。我很困惑,因为我认为这不应该工作,因为
sum
函数在 main
之后出现 > 没有 sum
函数的提示,就像它在 main
之前的声明一样。这是因为编译步骤之一(如链接编辑)吗?另外,这是一个不好的做法(我应该使用带有
sum
声明的头文件)吗? 最佳答案
当没有声明时,编译器 假定 有这样的函数返回一个 int
(幸运的是,这里就是这种情况)并且链接器找到所需的符号,但仍然......
是的,链接器尝试从编译中解析未解析的符号。
是的,你应该,或者在 main 之前声明函数。
关于在 C 中编译多个源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6907918/