Contents

Develop
2003.04.23 10:56

[c] 스토리지 클래스(변수)

조회 수 8224 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
변수의 스코프(scope): 변수가 프로그램내에서 사용될 수 있는 범위
변수의 라이프타임(lifetime): 변수가 존재하는 시간(기간)
스토리지 클래스(storage class): 스토리지 클래스는 변수의 스코프와 라이프타임을 결정한다.

스토리지 클래스 종류
1. extern : 전역변수 
        스코프: 프로그램 전체
        라이프타임: 프로그램이 실행되는 모든 시간

2. auto: 지역 변수
        스코프: 변수가 선언된 블락이나 함수
        라이프타임: 변수가 선언된 함수나 블락이 실행되는 동안

3. static: 정적 변수
        스코프: 변수가 선언된 블락이나 함수
        라이프타임: 프로그램이 실행되는 모든 시간 동안

4. register: 레지스터 변수, 프로그램의 최적화를 위해 사용된다.
        스코프: auto와 동일
        라이프타임: auto와 동일

*변수는 정의되기 전에 사용될 수 없다.

예제: storage.c
     1  #include <stdio.h>
     2
     3  int  extern_int = 10;
     4
     5  int add(int a, int b) {
     6      auto    int  auto_int;
     7      static  int  static_int;
     8
     9      auto_int = a + b + extern_int;
    10      static_int +=  auto_int;
    11      printf("tadd::auto_int = %dn", auto_int);
    12      printf("tadd::static_int = %dn", static_int);
    13      return auto_int;
    14  }
    15
    16  main(int argc, char ** argv) {
    17      register  int  i, sum = 0;
    18      auto      int  d;
    19
    20      for(i=0; i < 5; i++) {
    21          d = i*i;
    22          extern_int++;
    23          sum += add(i, d);
    24          printf("n");
    25      }
    26      printf("sum = %d n", sum);
    27  }

결과
#7 enterprise:/data1/student/c9844000% storage
        add::auto_int = 11
        add::static_int = 11

        add::auto_int = 14
        add::static_int = 25

        add::auto_int = 19
        add::static_int = 44

        add::auto_int = 26
        add::static_int = 70

        add::auto_int = 35
        add::static_int = 105

sum = 105 


예제: storage2.c
     1  #include <stdio.h>
     2
     3  int  value = 10;
     4
     5  main(int argc, char ** argv) {
     6      register  int  i;
     7
     8      printf("value = %dn", value);
     9      for(i=0; i < 5; i++) {
    10          int value = 20;
    11          if(i == 2) {
    12              int value = 30;
    13              printf("ttvalue = %dn", value);
    14          } else {
    15              printf("tvalue = %dn", value);
    16          }
    17      }
    18      printf("value = %dn", value);
    19  }


결과
#15 enterprise:/data1/student/c9844000% storage2
value = 10
        value = 20
        value = 20
                value = 30
        value = 20
        value = 20
value = 10

예제: storage3.c
     1  #include <stdio.h>
     2
     3  int  value = 10;
     4
     5  main(int argc, char ** argv) {
     6      register  int  i;
     7
     8      printf("value = %dttt:&value = %pn", value, &value);
     9      for(i=0; i < 5; i++) {
    10          int value = 20;
    11          if(i == 2) {
    12              int value = 30;
    13              printf("ttvalue = %dt:&value = %pn", value, &value);
    14          } else {
    15              printf("ttvalue = %dt:&value = %pn", value, &value);
    16          }
    17      }
    18      printf("value = %dttt:&value = %pn", value, &value);
    19  }

결과
#22 enterprise:/data1/student/c9844000% storage3
value = 10                      :&value = 20b08
                value = 20      :&value = effffa38
                value = 20      :&value = effffa38
                value = 30      :&value = effffa34
                value = 20      :&value = effffa38
                value = 20      :&value = effffa38
value = 10                      :&value = 20b08


예제: storage4.c
     1  #include <stdio.h>
     2
     3  int  value = 10;
     4
     5  main(int argc, char ** argv) {
     6      register  int  i;
     7
     8      printf("value = %dttt:&value = %pn", value, &value);
     9      for(i=0; i < 5; i++) {
    10          static int value = 20;
    11          if(i == 2) {
    12              int value = 30;
    13              printf("ttvalue = %dt:&value = %pn", value, &value);
    14          } else {
    15              printf("ttvalue = %dt:&value = %pn", value, &value);
    16          }
    17      }
    18      printf("value = %dttt:&value = %pn", value, &value);
    19  }

결과
#28 enterprise:/data1/student/c9844000% storage4
value = 10                      :&value = 20b10
                value = 20      :&value = 20b14
                value = 20      :&value = 20b14
                value = 30      :&value = effffa38
                value = 20      :&value = 20b14
                value = 20      :&value = 20b14
value = 10                      :&value = 20b10


예제: storage5.c
     1  #include <stdio.h>
     2
     3  int  value = 10;
     4
     5  main(int argc, char ** argv) {
     6      register  int  i, sum = 0;
     7
     8      printf("sum = %dttt:&sum = %pn", sum, &sum);
     9      printf("value = %dttt:&value = %pn", value, &value);
    10      for(i=0; i < 5; i++) {
    11          static int value = 20;
    12          if(i == 2) {
    13              int value = 30;
    14              printf("ttvalue = %dt:&value = %pn", value, &value);
    15          } else {
    16              printf("ttvalue = %dt:&value = %pn", value, &value);
    17          }
    18      }
    19      printf("value = %dttt:&value = %pn", value, &value);
    20  }

컴파일
#32 enterprise:/data1/student/c9844000% cc -o storage5 storage5.c
"storage5.c", line 8: cannot take address of register: sum

#34 enterprise:/data1/student/c9844000% gcc -o storage5 storage5.c
storage5.c: In function `main':
storage5.c:8: warning: address of register variable `sum' requested


예제: storage6.c
     1  #include <stdio.h>
     2
     3  int  extern_int = 10;
     4  extern int add(int, int);
     5
     6  main(int argc, char ** argv) {
     7      register  int  i, sum = 0;
     8      auto      int  d;
     9
    10      for(i=0; i < 5; i++) {
    11          d = i*i;
    12          extern_int++;
    13          sum += add(i, d);
    14          printf("n");
    15      }
    16      printf("sum = %d n", sum);
    17  }
    18
    19  int add(int a, int b) {
    20      auto    int  auto_int;
    21      static  int  static_int;
    22
    23      auto_int = a + b + extern_int;
    24      static_int +=  auto_int;
    25      printf("tadd::auto_int = %dn", auto_int);
    26      printf("tadd::static_int = %dn", static_int);
    27      return auto_int;
    28  }

결과
#37 enterprise:/data1/student/c9844000% storage6
        add::auto_int = 11
        add::static_int = 11

        add::auto_int = 14
        add::static_int = 25

        add::auto_int = 19
        add::static_int = 44

        add::auto_int = 26
        add::static_int = 70

        add::auto_int = 35
        add::static_int = 105

sum = 105 


예제: storage7.c 
     1  #include <stdio.h>
     2
     3  int  value = 10;
     4
     5  main(int argc, char ** argv) {
     6      register  int  i;
     7      int       value = 20;
     8
     9      printf("value = %dn", value);
    10      for(i=0; i < 5; i++) {
    11          extern int value;
    12          if(i == 2) {
    13              int value = 30;
    14              printf("ttvalue = %dn", value);
    15          } else {
    16              printf("tvalue = %dn", value);
    17          }
    18      }
    19      printf("value = %dn", value);
    20  }

결과
#45 enterprise:/data1/student/c9844000% storage7
value = 20
        value = 10
        value = 10
                value = 30
        value = 10
        value = 10
value = 20


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
841 Develop 프로그램 문서 관리 (Doxygen) hooni 2013.04.23 16446
840 Develop 프로그래밍에서 foo, bar 함수의 유래 file hooni 2013.06.25 21488
839 Develop 프로그래밍 소스 관련 사이트.. hooni 2013.04.23 16533
838 Develop 페이팔에서 돈 찾기 (Paypal withdraw) file hooni 2014.02.20 11487
837 Develop 캘리포니아 운전면허 족보 file hooni 2017.06.12 899
836 Develop 최근 논문 자료 (2011/01/03, 만현형한테 보낸거..) secret hooni 2013.04.23 10366
835 Develop 참고하고 지울 자료.. 집에서 바야지.. ㅋㅋ file hooni 2013.04.23 12183
834 Develop 정리할 자료. file hooni 2015.07.02 831
833 Develop 자주 쓰는 Docker 명령어 alias hooni 2020.01.10 272999
832 Develop 이어서 작업할 내용~ secret hooni 2013.11.21 0
831 Develop 웹페이지 성능 테스트 툴 설명 hooni 2013.04.23 27527
830 Develop 알고리즘 성능분석 file hooni 2014.06.24 3113
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 71 Next
/ 71