曾几何时,我在学校的老师展示了一些问题代码示例"输出结果是什么?"。它是这样的:
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
作为结果,使用这两种不同的(?)方法进行编译。我想在编译问题时简单地询问这是否是源文件的顺序,以及如何将此示例重现为工作,就像我记得的那样。这甚至可能吗?
答案 0 :(得分:2)
您正在获得正确的预期行为。链接顺序不应影响程序的输出 - 在宽范围内。 (如果一对库以不同的方式实现一个共同的功能,那么如果你链接到两个库,那么库的链接顺序就很重要,但这比你正在处理的更复杂。 )
我建议忘记替代行为,因为无法再查询发端人。