반응형
출처: http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10104&eid=61+4XczcSTtNeRadtEceQZxhRcPh2Atk&qb=ZXh0ZXJu&enc=utf8&section=kin&rank=3&sort=0&spq=0&pid=fCxq4doi5Uhssc/OgL4sss--095497&sid=SkwNzXfqS0oAAHNLNFs

- 프로그래머의 [적] 전역변수 -

 

안녕하세요.. 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 포팅 같이 꽤 방대한 분량의 코드에서는 전역변수 저넘이 어느 타이밍에서 어떤 값으로 변환되는지 알기가 쉽지 않아서.. 분담코드 작성에는 매.우. 비효율적입니다...

----------

아.. 이 난관을 어케 해야하노 ㅠㅠ.....

'language > C' 카테고리의 다른 글

int vs char 차이  (0) 2011.07.07
warning - array subscript has type `char'  (0) 2010.01.06
BCD(binary Coded Decimal)  (0) 2009.06.23
gcc설치하여 vim으로 편집하기  (0) 2009.05.19
continue 와 break 차이  (0) 2009.05.13

+ Recent posts