Scope Rule & Storage Class
2
Storage Classes
§ Local 변수
– Function안에서 선언되는 variable
– 선언된 function 안에서만 사용 가능
– Function이 호출될 때 function 내부에 선언된 loca...
3
Storage Classes
§ Local 변수
void func(void) {
int k = 0;
printf( “%dn”, k ) ;
k = 10 ;
printf( “%dn”, k ) ;
}
#include <s...
4
Storage Classes
§ Global 변수
– Function block 밖에서 선어된 변수
– 모든 함수에서 사용 가능
– 프로그램이 시작할 때 생성된 후 프로그램이 종료될 때까지
메모리에 존재
• 생성된 ...
5
Storage Classes
§ Global 변수
void func(void) {
int k = 0;
printf( “%d %dn”, k, ++g );
k = 10;
printf( “%d %dn”, k, ++g );...
6
Storage Classes
§ static 변수
– global변수와 매우 유사
• 프로그램 시작할 때 생성되었다가 프로그램 끝날 때까지 메모리에
존재
• 변수가 생성된 이후 자동적으로 0으로 초기화가 됨
– Fu...
7
Storage Classes
§ static 변수
void func(void)
{
static int s ;
int k = 0;
printf( “%d %dn”, k, ++s ) ;
k = 10 ;
printf( “%...
8
Scope Rules
§ static 변수
– 예제: 함수가 몇 번째 호출 되었나?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void do_nothing(...
9
Storage Classes
§ register 변수
– memory 중에서 가장 빠른 register를 사용하도록 요청
– int만 register로 선언가능
– register로 선언하지 않아도 register에...
10
const
§ const
– 값을 수정할 수 없는 변수를 선언할 때 type의 앞에 사용
– 선언할 때 반드시 초기화해야 함. 초기화후 값 변경 불 가능
– 변수의 값을 바꿀 수 없도록 선언하는 것.
• 상수를 선...
11
Scope Rules
§ Scope Rules
– 어느 특정 identifier의 접근 가능성 여부 판단
– declaration statement위치에 따라 접근 범위 결정
– block안에서 선언된 identi...
12
Scope Rules
§ Scope Rules
#include <stdio.h>
int g ;
void function() {
static int a ;
printf(“a=%d g=%d”, a, g);
}
int ...
Upcoming SlideShare
Loading in …5
×

7. variable scope rule,-storage_class

353 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
353
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

7. variable scope rule,-storage_class

  1. 1. Scope Rule & Storage Class
  2. 2. 2 Storage Classes § Local 변수 – Function안에서 선언되는 variable – 선언된 function 안에서만 사용 가능 – Function이 호출될 때 function 내부에 선언된 local variable 들은 시스템 스택에 생성되었다가 return하면 없어진다. • 이후 그 Function이 다시 호출되면, 새로운 영역의 memory가 할당되며, 이전의 값은 유지되지 않는다. int sum( int k ) { int a ; a = k + 3 ; return a ; }
  3. 3. 3 Storage Classes § Local 변수 void func(void) { int k = 0; printf( “%dn”, k ) ; k = 10 ; printf( “%dn”, k ) ; } #include <stdio.h> void func(void); int main(void) { float f = 0 ; printf( “%fn”, f ) ; func() ; func() ; return 0; }
  4. 4. 4 Storage Classes § Global 변수 – Function block 밖에서 선어된 변수 – 모든 함수에서 사용 가능 – 프로그램이 시작할 때 생성된 후 프로그램이 종료될 때까지 메모리에 존재 • 생성된 후 자동으로 0으로 초기화 된다. int g ; int main() { printf( “%dn”, g ); my_func(); printf( “%dn”, g ); return 0; } void my_func() { g = 10; }
  5. 5. 5 Storage Classes § Global 변수 void func(void) { int k = 0; printf( “%d %dn”, k, ++g ); k = 10; printf( “%d %dn”, k, ++g ); } #include <stdio.h> int g; void func(void); int main(void) { printf( “%dn”, g ); func(); printf( “%dn”, g ); return 0; }
  6. 6. 6 Storage Classes § static 변수 – global변수와 매우 유사 • 프로그램 시작할 때 생성되었다가 프로그램 끝날 때까지 메모리에 존재 • 변수가 생성된 이후 자동적으로 0으로 초기화가 됨 – Function내부에서 선언된 경우 • 선언된 function 내에서만 접근 가능 – Function 외부에서 선언된 경우 • 선언된 source file내에서만 접근 가능 (추후 여러 파일로 프로그램 작성하기 참고)
  7. 7. 7 Storage Classes § static 변수 void func(void) { static int s ; int k = 0; printf( “%d %dn”, k, ++s ) ; k = 10 ; printf( “%d %dn”, k, ++s ) ; } #include <stdio.h> void func(void); int main(void) { func() ; func() ; return 0; }
  8. 8. 8 Scope Rules § static 변수 – 예제: 함수가 몇 번째 호출 되었나? #include <stdio.h> #include <stdlib.h> #include <time.h> void do_nothing(void) ; int main(void) { int j ; srand( time(NULL) ) ; for( j = 0 ; j < 10 ; j++ ) if( rand() % 2 ) do_nothing() ; return 0; } void do_nothing(void) { static int cnt ; printf( “do_nothing is called %d time(s)n”, ++cnt ) ; }
  9. 9. 9 Storage Classes § register 변수 – memory 중에서 가장 빠른 register를 사용하도록 요청 – int만 register로 선언가능 – register로 선언하지 않아도 register에 할당될 수 있고, register로 선언했어도 register에 할당되지 않을 수 있음 [Ex] int main() { register int i; /* register i 와 같음 */ for(i = 0; i < LIMIT; ++i) { … } }
  10. 10. 10 const § const – 값을 수정할 수 없는 변수를 선언할 때 type의 앞에 사용 – 선언할 때 반드시 초기화해야 함. 초기화후 값 변경 불 가능 – 변수의 값을 바꿀 수 없도록 선언하는 것. • 상수를 선언하는 것 아님 [Ex] const int a = 1; [Ex] const int a = 1; a = 4; /* error!! */ a++; /* error!! */
  11. 11. 11 Scope Rules § Scope Rules – 어느 특정 identifier의 접근 가능성 여부 판단 – declaration statement위치에 따라 접근 범위 결정 – block안에서 선언된 identifier • 그 block안에서 만 접근 가능 • 그 block이 수행될 때 변수가 생성되었다가 수행이 끝나면 변수 가 없어짐 – block 밖에서 선언된 identifier • 기본적으로 모든 block에서 접근 가능 • 프로그램이 시작할 때 생겼다가 프로그램이 끝날 때 없어짐.
  12. 12. 12 Scope Rules § Scope Rules #include <stdio.h> int g ; void function() { static int a ; printf(“a=%d g=%d”, a, g); } int main(void) { int a = 3, b = 4; { int b=5; printf(“%d %d”, a, b, g); } printf(“%d %d”, a, b, g); function() ; } 각각의 변수가 언제 생겼다가 언제 없어지는가? 어느 변수가 어느 변수를 의미하는가?

×