为什么链接订单与外部变量有关?

时间:2014-09-23 17:08:31

标签: c extern

曾几何时,我在学校的老师展示了一些问题代码示例"输出结果是什么?"。它是这样的:

file1.c(只有一行):

int a = 8;

file2.c中:

#include <stdio.h>

int main(void) {
    int b = 20;
    extern int a;
    printf("%d", a + b);
}

然后,他编写了两次:第一次是这样的:

gcc file1.c file2.c -o prog_name

输出是我猜28;但后来,他以这种方式编译(或类似于此):

gcc file2.c file1.c -o prog_name

结果不同,我认为是20

现在,当我想重现这个&#34;棘手的问题&#34;我只使用28作为结果,使用这两种不同的(?)方法进行编译。我想在编译问题时简单地询问这是否是源文件的顺序,以及如何将此示例重现为工作,就像我记得的那样。这甚至可能吗?

1 个答案:

答案 0 :(得分:2)

您正在获得正确的预期行为。链接顺序不应影响程序的输出 - 在宽范围内。 (如果一对库以不同的方式实现一个共同的功能,那么如果你链接到两个库,那么库的链接顺序就很重要,但这比你正在处理的更复杂。 )

我建议忘记替代行为,因为无法再查询发端人。