-
변수의 스코프
[학습내용] [학습목표] ▪ 지역변수
▪ 전역변수▪ 지역변수의 유효범위를 알고 사용할 수 있다.
▪ 전역변수의 유효범위를 알고 사용할 수 있다.지역변수
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을 선언하여 외부에서도 참조 가능
'Blog > JAVA기반 스마트웹 개발2021' 카테고리의 다른 글
프로그래밍 언어 활용 part 1 - 문자열 (0) 2021.07.28 프로그래밍 언어 활용 part 1 - 배열 (0) 2021.07.28 프로그래밍 언어 활용 part 1 - 함수 (0) 2021.07.26 프로그래밍 언어 활용 part 1 - 반복문 (0) 2021.07.26 프로그래밍 언어 활용 part 1 - 조건문 (0) 2021.07.25 댓글