2009-05-17 4 views
14

유닉스에는 3 개의 메인 파일이 있습니다. 그 중 하나는 도서관이고 다른 하나는 프로그램입니다.C에서 extern 변수 연결하기

  • MyLib.cMyLib.h은 라이브러리입니다.
  • main.c은 프로그램입니다.

MyLib.h에는 (extern int Variable;)이라는 선언이 있습니다. 을 main.c에 사용하려고하면 할 수 없습니다. 물론 MyLib.cmain.cMyLib.h을 포함 시켰으며 링크도했습니다. 어쨌든 변수는 main.c에서 인식되지 않습니다.

프로그램을 연결할 때 변수를 어떻게 사용할 수 있습니까?

+0

게시하시기 바랍니다 소스와 오류 . 특히 main.c를 빌드 할 수 없을 때 어떻게 링크를 관리 했습니까? – Macker

+0

필자는 main.c의 한계를 넘어 섰다. 나는 컴파일러와 링커가 어떻게 작동하는지 이해하려고 삼진했다. 그러나 Chris Lutz의 대답이 효과가있었습니다. 감사. –

답변

29

Variable은 어딘가에 정의해야합니다. MyLib.c에 전역 변수로 선언 한 다음 main.cextern으로 선언합니다. 무슨 일이 일어나고 무엇

MyLib.cmain.c 모두, 컴파일러는 Variable이 존재하고 int이라고 말했다되고 있다는 것입니다하지만 다른 곳 (extern) 있다고. 어느 쪽이 좋을지 모르지만 실제로는 어딘가에 있어야하고 링커가 모든 파일을 함께 연결하려고하면 실제로는 어디에도 없기 때문에 Variable을 찾을 수 없으므로 존재하지 않습니다.

이 시도 :

MyLib.c :

int Variable; 

MyLib.h :

extern int Variable; 

을 main.c :

#include "MyLib.h" 

int main(void) 
{ 
    Variable = 10; 
    printf("%d\n", Variable); 
    return 0; 
} 
+0

감사합니다. 방금 이해했습니다. –

+0

문제 없습니다. 편집의 여러 단계는 처음에는 꽤 혼란 스러울 수 있습니다. –

+0

@Chris Lutz 좋은 설명. 1 + 당신을 위해 :) – mahesh