[C] Scope
함수와 여러 문법을 중첩해서 사용할 때, 변수의 이름이 겹치는 경우가 많아 내가 어떤 변수를 사용하게 될 지 헷갈리는 경우가 많이 발생한다.
void func1(){
int i =0;
while(1){
int k = 100;
int i =1;
while(1){
int i = 2;
while(1) {
printf("%d %d", k, i); // 어떤 k 이고 어떤 i 일까?
}
}
}
}
바로 위와 같은 경우인데, 이 경우 가장 가까운 Scope부터 변수를 탐색한다.
위에서는 k에는 100, i에는 2가 해당된다.
이를 Scoping 규칙이라고 한다.
변수의 Scope와 Lifetime을 헷갈리면 안된다.
개념을 명확히 하고 가자.
Lifetime은 시간적인 개념이고, Scope는 공간적인 개념이라고 이해할 수 있다.
Scope는 프로그램의 몇 번째 줄 ~ 몇 번째 줄 로 표현할 수 있고
Lifetime은 함수 func1이 호출된 다음 리턴할 때 까지라고 표현할 수 있다.
전역변수의 Lifetime은 프로그램의 시작부터 끝까지이고, 지역변수의 Lifetime은 함수의 호출부터 리턴까지이다.
지역변수는 별도의 초기화를 진행하지 않을 시 스택 프레임에 남아 있는 쓰레기 값으로 초기화되고, 전역변수는 0으로 초기화된다.
여기서 전역변수와 정적변수의 차이점을 다시 한 번 부각할 수 있는데, 전역변수의 Scope는 전체 프로그램이지만 정적변수의 Scope는 해당 함수까지이다. (Lifetime은 유사하다)
반응형
'Programming Language > C' 카테고리의 다른 글
[C] 배열 (0) | 2022.03.28 |
---|---|
[C] 함수 간 소통 / 재귀 (0) | 2022.03.22 |
[C] Register / Volatile (0) | 2022.03.22 |
[C] 스택 프레임 (0) | 2022.03.22 |
[C] 입문 (0) | 2022.03.22 |
댓글
이 글 공유하기
다른 글
-
[C] 함수 간 소통 / 재귀
[C] 함수 간 소통 / 재귀
2022.03.22 -
[C] Register / Volatile
[C] Register / Volatile
2022.03.22 -
[C] 스택 프레임
[C] 스택 프레임
2022.03.22 -
[C] 입문
[C] 입문
2022.03.22