Your SlideShare is downloading. ×
0
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

7. variable scope rule,-storage_class

95

Published on

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

  • Be the first to like this

No Downloads
Views
Total Views
95
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Scope Rule & Storage Class
  • 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 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 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 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 Storage Classes § static 변수 – global변수와 매우 유사 • 프로그램 시작할 때 생성되었다가 프로그램 끝날 때까지 메모리에 존재 • 변수가 생성된 이후 자동적으로 0으로 초기화가 됨 – Function내부에서 선언된 경우 • 선언된 function 내에서만 접근 가능 – Function 외부에서 선언된 경우 • 선언된 source file내에서만 접근 가능 (추후 여러 파일로 프로그램 작성하기 참고)
  • 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 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 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 const § const – 값을 수정할 수 없는 변수를 선언할 때 type의 앞에 사용 – 선언할 때 반드시 초기화해야 함. 초기화후 값 변경 불 가능 – 변수의 값을 바꿀 수 없도록 선언하는 것. • 상수를 선언하는 것 아님 [Ex] const int a = 1; [Ex] const int a = 1; a = 4; /* error!! */ a++; /* error!! */
  • 11. 11 Scope Rules § Scope Rules – 어느 특정 identifier의 접근 가능성 여부 판단 – declaration statement위치에 따라 접근 범위 결정 – block안에서 선언된 identifier • 그 block안에서 만 접근 가능 • 그 block이 수행될 때 변수가 생성되었다가 수행이 끝나면 변수 가 없어짐 – block 밖에서 선언된 identifier • 기본적으로 모든 block에서 접근 가능 • 프로그램이 시작할 때 생겼다가 프로그램이 끝날 때 없어짐.
  • 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() ; } 각각의 변수가 언제 생겼다가 언제 없어지는가? 어느 변수가 어느 변수를 의미하는가?

×