2014-09-23 60 views
-1

曾几何时,我在学校的老师展示了一些代码问题示例:“输出是什么?”。它是这样的:为什么链接顺序与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

现在,当我想重现这个“棘手的问题”时,我只得到28作为结果,使用这两种不同的(?)方法进行编译。我想简单地问一下,在编译问题时,这是否是源文件的顺序,以及如何重现这个例子来工作,因为我记得它是。这甚至有可能吗?

+0

问问老师,清楚你对此的记忆太朦胧了。 – 2014-09-23 17:11:23

+1

您正在获得正确的预期行为。链接顺序不应影响程序的输出 - 在广泛的范围内。 (如果一对库以不同的方式实现一个通用函数,那么这两个库的链接顺序就很重要,但这比你处理的要复杂得多。) – 2014-09-23 17:11:34

+0

@HansPassant他现在已经死了。 – python 2014-09-23 17:13:16

回答

2

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

I建议忘记替代行为,因为发端人不再可以咨询。

+0

我认为你提出了一个很好的观点,但我仍然想问问是否确实这是不可能的:)我会稍微等一会然后接受这个答案。 – python 2014-09-23 17:22:50