[변수] 공통 변수를 다른 파일에서 쓰려면?
글쓴이: rimuzzang / 작성시간: 토, 2005/10/22 - 10:59오후
예를 들어서
int number;
라는 변수를
커널 소스 상에서
a.c b.c 에서 동시에 쓰고 싶습니다.
현재
temp.c 를 만들어서
extern int number;
라는 것만 써넣고
a.c 와 b.c 에서
#include <temp.c> 를 했습니다만.
테스트 해본 결과 a.c 에서의 number 와
b.c 에서의 number 는 따로 놀더군요.
어떻게 동시에 저것을 쓸수 있는 방법은 없나요?
Makefile 을 고치면 될까 싶었는데.
/linux/kernel 상의 Makefile 에
a.o b.o temp.o 를 해놓았는데도 따로 관리 됩니다.
어떤 방법이 없을까요?
Forums:
음.. 전역변수와 관련된 문제는 포인터와 함께 상당히 골치 아픈 문제지요
음.. 전역변수와 관련된 문제는 포인터와 함께 상당히 골치 아픈 문제지요. ^^;
일단 확실히 아셔야 할 것이 두 가지 있습니다.
전역변수에 extern이 붙으면 선언문이라는 것과
이게 없으면 정의문이라는 거죠.
그리고 선언문은 얼마든지 올 수 있지만
정의문은 오직 한 번만 올 수 있지요.
(컴파일상에서 문제가 없더라도 링크 시 잡아줄 텐데요.. 음..)
1) 선언문만 두 개 있다. number의 실체는 어디서 오는 걸까?
고로 정의가 a.c나 b.c에 필요 (님의 경우에 해당??)
a.c:
extern int number;
b.c:
extern int number;
2) a.c와 b.c가 따로따로 놀 때는 상관없으므로 컴파일은 되지만,
두 개를 링크할 때는 정의가 두개 왔으므로 에러!!
a.c:
int number = 0;
b.c:
int number = 1;
3) a.c와 b.c를 합치고 싶을 때는
a.c:
int number = 0;
b.c:
extern int number;
혹은 이와 반대로 해도 무방
int number를 b.c 이외의 곳에서도 사용한다면..
이런 식으로 구현하면 될 듯 합니다.
temp.h:
extern int number;
a.c:
#include <temp.h>
int number = 0; // 정의는 꼭 한번 있어야 합니다~~~
b.c:
#include <temp.h>
c.c:
#include <temp.h>
감사합니다.
답변 감사드립니다.
extern 의 선언문과 정의문 새로운것을 배웠습니다. !
제가 배우기론... strong symbol 과 weak symbol
제가 배우기론... strong symbol 과 weak symbol 이 있어서... 링크 시에 동작이 달라지는 걸로 배웠습니다...
http://sal.hongik.ac.kr/~sikim/Courses/2004/sp/lecture/files/linker&loader.ppt
위의 슬라이드를 읽어보세요
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
off topic으로,, 정태영님은 그 슬라이드 교수님들을 아시나요? 혹
off topic으로,, 정태영님은 그 슬라이드 교수님들을 아시나요? 혹시 같은 출신인지 궁금하군요. :wink:
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
[quote="cinsk"]off topic으로,, 정태영님은 그 슬라이
예... 아직 졸업은 안했기 때문에 출신이라고 해도 될지는 모르겠지만 그 학교 학생입니다... :)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오~ 그럼 같은 과 출신인가 보네요.. 컴공 95거든요. 반갑습니다. :
오~ 그럼 같은 과 출신인가 보네요.. 컴공 95거든요. 반갑습니다. :)
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
같은 과는 아니에요 :)전자전기 전공에 컴퓨터는 복수전공 중이거든
같은 과는 아니에요 :)
전자전기 전공에 컴퓨터는 복수전공 중이거든요... 반갑습니다 :D
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
댓글 달기