- 프로그래머의 [적] 전역변수 -
안녕하세요.. extern에 대해 고민이 많으시군요..
한때, 저도 고민 많이 햇답니다.. extern << 이넘의 실체는?
전 이렇게 분류 하고 싶네요..
1. static 변수... 즉
void main 위에 위치하는 넘까지 포함해서..
-- 전.역.변.수 -- 라고 부르고 싶네요..
2. 지역변수
{ } 안에 위치한넘... ( ) 포함해서.
-- 지.역.변.수 라고 부르고 싶네요.
3. 광역변수
모든 프로젝트에 위치한넘.
전역변수는 에서는 선언된 이후라면 어디든 사용이 가능하죠..
하지만.. .h니 .c 니 이렇게 여러 프로젝트 단위로 나뉘어진 변수라면..
상.당.히 골치 아픕니다...
먼저 컴파일러가 되어서 생각 해보죠..
------- 1.c
int a; // a가 선언 되어있네?
void main()
{
a = 10; // 그래 a값이10 이구나.. 좋아. 넣어주지
}
// 컴파일 완료.. 아자 이상없구나~!!
-------- 2.c
// 새로 컴파일을 시작하네?
int sam()
{
a = 10; // 아자.. 이건 어디서 굴러먹다온 뼉다그야.. ㅡㅡ 젝힐.....
}
// 몰라 배째 error
그럼 광역변수는 어케 되는걸까 잠시 보죠..
위의 예를 가지고 하죠
프로그래머 : 난 a를 광역으로 쓰고 싶다그.....
PC : 그럼 광역으로 쓴다는 걸 알려줘 어느넘인지 모르겠어..
프로그래머 : 알따 헤더파일을 만드러주지 ㅡㅡ
------------ 1.h
extern int a; // a너는 누구라도 쓸수 있는거야~~ 앙?
------- 1.c
#include "1.h"
int a; // a가 선언 되어있네? 메모리에 공간을 잡자..
void main()
{
a = 10; // 그래 a값이10 이구나.. 좋아. 넣어주지
}
// 컴파일 완료.. 아자 이상없구나~!!
-------- 2.c
#include "1.h"
// 새로 컴파일을 시작하네?
int sam()
{
a = 20; // 어라? a가.. 전체적으로 사용하네.. (메모리 공간이 잡혀있나?) 오.. 잡혀있다.
}
// 좋아 굳굳굳...
------------ 즉 extern 선언은 컴파일러가 알아 듣기 위한 최소한의 요구 사항입니다.
아니면, 해당 변수를 찾을수가 없어서. 난리 치는거죠.. ㅠㅠ
이보다.. 간결한 방법은.. ^^;;;;;;; 쓰지 않고 지역 변수를 사용 하는 방법 입니다만...
모바일 프로그램 같은.. 속도를 요하는 프로그래밍에서는 변수를 지역으로 잡아서 새로이 생성 하는데 리스크가 너무 크다고 생각합니다.
int sam() // 100번만 호출되도
{
int a; // 100번 생성해야하니 원~!!!
}
그래서 어쩔수 없이 전역 혹은 광역변수를 사용 하지요..
또한,, 모바일 OS 포팅 같이 꽤 방대한 분량의 코드에서는 전역변수 저넘이 어느 타이밍에서 어떤 값으로 변환되는지 알기가 쉽지 않아서.. 분담코드 작성에는 매.우. 비효율적입니다...
'프로그래밍 > C·C++' 카테고리의 다른 글
리눅스 로케일 세팅 (0) | 2010.08.11 |
---|---|
리눅스 curses.h 설명 (0) | 2010.08.11 |
리눅스 curses.h 사용 예 (0) | 2010.08.11 |
char ch = getchar();의 문제의 원인 (0) | 2010.08.11 |
getc(), getch(), getchar() (1) | 2010.08.11 |