2014-09-23 4 views
-1

옛날 옛적에 학교의 선생님은 "출력은 어떻게 될 것입니까?"라는 질문을 가진 코드 예제를 보여주었습니다.주문 관련 문제를 외부 변수와 연결하는 이유는 무엇입니까?

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

대신 선생님에게 물어보십시오.이 사실에 대한 기억은 너무 흐릿합니다. –

+1

올바른 동작이 예상됩니다. 링크 순서는 프로그램의 출력에 영향을주지 않아야합니다. (한 쌍의 라이브러리가 다른 방식으로 공통 기능을 구현하는 경우 두 라이브러리의 링크 순서가 중요하지만 그 방법은 다루는 것보다 훨씬 복잡합니다.) –

+0

@HansPassant 그는 죽었습니다. – python

답변

2

올바른 동작이 기대됩니다. 링크 순서는 프로그램의 출력에 영향을주지 않아야합니다. (한 쌍의 라이브러리가 서로 다른 방식으로 공통 기능을 구현하는 경우 두 라이브러리와 링크하면 라이브러리의 링크 순서가 중요하지만 그 방법은 다루는 것보다 훨씬 복잡합니다.)

I 발신자가 더 이상 문의 할 수 없으므로 대체 행동을 잊어 버리는 것이 좋습니다.

+0

나는 당신이 좋은 지적을했다고 생각하지만, 어쨌든 이것이 불가능하다는 것을 묻고 싶다. 나는 조금 더 기다렸다가이 대답을 받아 들일 것이다. – python