전역변수&extern


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

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

댓글 남기기

바로가기