프로그래밍 언어 활용 part 1 - 변수의 스코프
변수의 스코프
[학습내용] | [학습목표] |
▪ 지역변수 ▪ 전역변수 |
▪ 지역변수의 유효범위를 알고 사용할 수 있다. ▪ 전역변수의 유효범위를 알고 사용할 수 있다. |
지역변수
1. 개요
▪ 변수 스코프(Scope) : 변수 참조가 가능한 유효범위
▪ 함수 내에 선언된 변수, Local Variable
▪ 변수가 선언된 블록에서만 유효한 변수
▪ 함수가 시작 시 생성, Stack에 생성
▪ 함수가 종료되면 변수도 소멸
▪ 초기화 전 쓰레기 값을 가지고 있음
▪ 매개변수도 지역변수
int main()
{
int a,b;
char c;
}
void sub()
{
int a;
}
2. 유효범위
▪ 변수가 선언된 블록에서만 유효
int main()
{
int a=3,b;
char c;
}
void sub()
{
printf(“%d”, a);
}
▪ 함수 시작 시 생성되고 종료 시 소멸
int main()
{
int a=3,b;
char c;
sub();
}
void sub()
{
int a=5;
printf(“%d”, a);
}
▪ 생성 시 쓰레기 값을 가짐
▪ 매개변수도 지역변수임
int main()
{
int a=3,b;
char c;
printf(“%d”, a);
printf(“%d”, b);
b=2;
sub(a);
printf(“%d”, a);
printf(“%d”, b);
return 0;
}
void sub(int b)
{
int a=5;
printf(“%d”, a);
b = a+b;
printf(“%d”, b);
}
▪ 블록 내에서 변수 선언이 가능(C99)
▪ 선언된 블록에서 유효
C 언어 표준 |
• 1983년(ANSI : American National Standard Institute) 에서 ANSI C라는 표준안을 발표 • 이후 ISO 주도로 표준안을 발표(C99, C11) |
전역변수
▪ 프로그램 내 전체 함수에서 유효, Global Variable
▪ 프로그램 시작 시 생성, 데이터 영역에 생성
▪ 프로그램 종료 시 소멸
▪ 함수 밖에서 선언
▪ 자동으로 0으로 초기화
▪ 전역변수는 프로그램 전체에서 참조하므로 복잡성을 증대
▪ 모듈화의 독립성 확보가 어려움
▪ 메모리 공간을 점유
▪ 동일한 이름의 전역변수와 지역변수 사용 시 지역변수가 우선함
#include <stdio.h>
int sub(int);
int main()
{
int a
printf(“%d”, a); a=3;
printf(“%d”, a);
a = sub(a);
printf(“%d”, a);
return 0;
}
int sub( int a)
{
printf(“%d”, a);
a++;
return a;
}
#include <stdio.h>
int a;
int main()
{
printf(“%d”, a); a=3;
printf(“%d”, a);
sub();
printf(“%d”, a);
return 0;
}
void sub( )
{
printf(“%d”, a);
a++;
}
#include <stdio.h>
int a;
int main()
{
int a= 7;
printf(“%d”, a); a=3;
printf(“%d”, a);
sub();
printf(“%d”, a);
return 0;
}
void sub( )
{
int a = 5;
printf(“%d”, a);
a++;
}
2. 다중 파일
▪ extern을 선언하여 외부에서도 참조 가능
▪ extern int 변수; 외부에 선언된 변수를 참조한다는 선언문
main.c | sub.c |
#include <stdio.h> int a; int main() { int a= 7; printf(“%d”, a); a=3; printf(“%d”, a); sub(); printf(“%d”, a); return 0; } |
extern int a; void sub( ) { printf(“%d”, a); a++; } |
평가하기
Q1. 지역변수에 대한 설명으로 옳지 않은 것은 무엇인가?
① 스택 영역에 생성된다.
② 선언 시 0으로 초기화된다.
③ 선언된 블록을 빠져나가면 소멸된다.
④ 블록 내에서 선언되는 변수이다.
지역변수는 선언만 하고 자동으로 초기화하지는 않으므로 쓰레기 값이 있습니다.
Q2. 다음 중 전역변수에 대한 설명으로 옳지 않은 것은 무엇인가?
① 함수 밖에서 선언되어 프로그램 전체에서 유효하다.
② 선언 시 자동으로 0으로 초기화된다.
③ 동일 프로그램 내의 다른 함수에서 사용하려면 별도의 선언문을 추가해야 한다.
④ 필요 시 다른 파일에서도 사용 가능하다.
전역변수는 다른 함수에서도 별도의 선언 없이 유효합니다.
Q3. 전역변수 정수형을 선언하면 어떤 값으로 초기화되는가?
① 초기화되지 않음
② 0으로 초기화
③ 1로 초기화
④ null로 초기화
정수형은 0으로 초기화됩니다.
학습정리
1. 지역변수
• 변수 스코프(Scope) : 변수 참조가 가능한 유효범위
• 함수 내에 선언된 변수, Local Variable
• 변수가 선언된 블록에서만 유효한 변수
• 함수가 시작 시 생성, Stack에 생성
• 함수가 종료되면 변수도 소멸
• 초기화 전 쓰레기 값을 가지고 있음
• 매개변수도 지역변수
• 유효범위
- 변수가 선언된 블록에서만 유효
- 함수 시작 시 생성되고 종료 시 소멸
- 생성 시 쓰레기 값을 가짐
- 매개변수도 지역변수임
- 블록 내에서 변수 선언이 가능(C99)
- 선언된 블록에서 유효
2. 전역변수
• 프로그램 내 전체 함수에서 유효, Global Variable
• 프로그램 시작 시 생성, 데이터 영역에 생성
• 프로그램 종료 시 소멸
• 함수 밖에서 선언
• 자동으로 0으로 초기화
• 전역변수는 프로그램 전체에서 참조하므로 복잡성을 증대
• 모듈화의 독립성 확보가 어려움
• 메모리 공간의 점유
•다중 파일
- extern을 선언하여 외부에서도 참조 가능