함수 외부의 값에 의존하지 않으므로, 함수의 독립성이 향상된다. 의도적으로 전역변수를 사용하는 경우는 제외
디버깅 용이
함수 내부에서 발생한 문제를 쉽게 추적할 수 있다.
기억공간 절약
지역변수는 사용된 후 scope 를 벗어나면 바로 메모리에서 제거된다.
재귀호출 함수 작성
전역변수를 재귀호출 구조에서 사용할 경우, 값이 누적되며 의도와 달라질 수 있다. 반면 재귀호출 구조에서 지역변수는 항상 초기화되므로, 의도된대로 움직인다.
코드로 보는 지역변수와 전역변수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
inta;//----------------- a : 전역변수 voidfunc(intb){// ---- b : 형식 매개변수(지역변수)intc;// ------------ c : 지역변수expressions_1;// ---- a, b, c 사용 가능{doubled;// ------ d : 지역변수 (코드블럭 내)expressions_2;// - a, b, c, d 사용 가능}expressions_1;// ---- a, b, c 사용 가능}doublee;//-------------- e : 전역변수intmain(){inta,f;// --------- a, f : 지역변수// 여기서의 a는 지역변수이며, 전역변수 a와는 다른 변수이다.expressions_3;// ---- a, e, f 사용 가능}
예시
지역변수의 사용 예시 1
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
voidfunc();intmain(){inti=10;printf("(1) main i = %d\n",i);func();printf("(3) main i = %d\n",i);}voidfunc(){inti;i=20;printf("(2) func i = %d\n",i);}
1
2
3
(1) main i = 10
(2) func i = 20
(3) main i = 10
지역변수의 사용 예시 2
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
intmain(){// block A : main 함수intx=2,y=4;printf("block A : x = %d, y = %d\n",x,y);{// block B : 중괄호로 둘러싸인 블록intx=5;y++;printf("block B : x = %d, y = %d\n",x,y);}printf("block A : x = %d, y = %d\n",x,y);}
1
2
3
block A : x = 2, y = 4
block B : x = 5, y = 5
block A : x = 2, y = 5
전역변수의 사용 예시
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
voudfunc();intx;// 전역변수 - 초기화 생략 -> 0으로 초기화 intmain(){printf(" 1 : x = %d\n",x);func();printf(" 2 : x = %d\n",x);}voidfunc(){// 형식매개변수는 없다 = 외부에서 매개변수를 받지 않음x++;// ---- x 는 전역변수이므로 어디에서든 쓰일 수 있다. }
1
2
1 : x = 0 #---- 초기화된 값
2 : x = 1 #---- func() 호출 후 x 값이 증가
Reference
C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)
Comments