假设我们有 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/

10-14 10:47
查看更多