[ 전역변수, 지역변수 ]

  

전역 변수 ( Global Vaiable )라는 것은 그이름이 의미하는 것처럼, 프로그램 어디에서나 접근이 가능한 변수를 말하는 것이다.

 

지역 변수 ( Local Variable )는 중괄호({ }) 내에 선언된 변수

즉! 함수 내에 선언된 변수와 {}내에 선언된 변수 

 

[코드]

 

위의 코드에서 보면 전역 변수와 같은 이름의 지역변수가 존재하는데 이럴땐 어떻게 될까?

 

[결과]


 

의외로 해깔릴수도 있겠지만, 결과를 보면, 확실히

"지역 내에서는 지역 변수가 전역 변수보다 우선시 된다." 는걸 알수 있다.

간단한거지만, 초보자에게는 실수하기 쉬운 내용이다.

프로젝트가 커지고, 전역변수가 난무(?)하는 프로그램을 만나다보면.. 알수있겠지만.. 사실상 저런코드는 아주 좋지 않다. 지역변수에 표기법도 그렇고, 나중에 알겠지만, 헝가리식표기법을 숙지하는게 좋다

 

머 다행이도 전역변수와 이름이 같다해도... 지역변수가 위니까 문법오류가 잘안나오는것 뿐 !!!

 

 

[ static, extern 키워드 ]

 

static 의 사전적의미는 '정적인'이란 뜻이다. static 키워드로 선언한 int형 변수는 자동으로 0으로 초기화 되며, 메모리 영역중 Data 영역에 저장되어 프로그램 시작부터 종료시까지 유지된다.

 

1) static 전역 변수

 

해당 소스파일내에서만 유효하게 쓰겠다는 의미이다.

따라서 다른 소스파일에서 해당 전역변수를 참고할 수 없다. 그러나 static이 아닌 extern 키워드로 전역변수를 선언할경우 다른 소스에서도 인식할 수 있다.

 

<main.c 소스>


<sub.c 소스>


 
static으로 전역변수를 선언하면, 다른 소스파일에서는 그 변수를 직접 바꿀 수도, 알 수도 없다.
하지만 static 전역변수를 선언한 쪽에서 이 변수를 바꿀 수 있는 함수를 제공한다면, 다른 소스파일에서 함수를 호출하는 방식으로 전역변수의 값을 바꿀 수 있다.
 
 
2) extern 전역 변수
<main.c 소스> 

 

<sub.c 소스> 


extern으로 변수를 선언한다면, 다른 소스파일에서도 이름을 같게 하여 설정하면 그 변수를 여러 소스에서 공유해서 쓴다는 것. 이후 main에 관련된 바이너리 파일을 만들 때, 컴파일하여 만들어진 각각의 오브젝트 main.o와 sub.o를 같이 링킹해준다. 그러면 main 소스쪽에서도 sub.c 함수를 통해 만들어진 전역변수 값의 변화를 알 수 있다.
─────────────────────────────────────────────
 

3) static 지역 변수

 

static 지역변수는 전역 변수의 특징을 일부 지니면서도, 선언된 지역 내에서만 접근이 가능하다.

 

 

[코드]

 

 

 

위 코드에서 static int sCount 변수는 main 함수에서 접근할 수 없다.

하지만 static 키워드로 함수내에 선언된 변수는 프로그램 시작시 한번 초기화 되므로 아래의 결과처럼 Count 가 증가 할 수 있는것이다.

 

[결과]


프로그램이 실행되는 동안에 계속해서 유지되어야 하는 변수가 있다면 대부분의 경우 전역 변수를 머리 속에 떠올린다. 그런데 그 변수에 접근하는 영역이 특정 지역에 종속된다면 우리는 static 변수의 선언을 생각 해야한다.

+ Recent posts