Develop
2003.04.23 10:56
[c] 스토리지 클래스(변수)
조회 수 8224 댓글 0
변수의 스코프(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
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
177 | System/OS | [windows] 여러가지 활용 팁 | hooni | 2003.04.23 | 20041 |
176 | Develop |
[c] AES 알고리즘 (암호화/복호화)
![]() |
hooni | 2003.04.23 | 20151 |
175 | Develop |
[c] UTF-8을 EUC-KR로 변환.. (iconv)
![]() |
hooni | 2013.04.23 | 20211 |
174 | Develop | [ios] UIView에서 상위 UIViewController 가져오기 | hooni | 2013.09.27 | 20259 |
173 | System/OS |
[linux] 꿀통(honeyd) 설치하기.. 메뉴얼 과정
6 ![]() |
hooni | 2006.04.23 | 20307 |
172 | Develop | [php] substr() 한글 자를 때 깨짐 방지 | hooni | 2014.01.09 | 20445 |
171 | Develop | [android] [번역] 안드로이드 Android Cloud to Device Messaging(C2DM) | hooni | 2013.04.23 | 20490 |
170 | Develop |
[opengl] 컴퓨터 그래픽스 강의 자료(수업자료)
![]() |
hooni | 2003.04.23 | 20527 |
169 | System/OS | asx미디어 정보 기록.. | hooni | 2003.04.23 | 20609 |
168 | Etc | [web] 제로보드 XE 템플릿에서 if문에 대해서 알아봅시다 | hooni | 2013.08.16 | 20621 |
167 | Develop | [c++] 디렉토리 내의 파일 찾기 FindFirstFile() 함수 6 | hooni | 2013.04.23 | 20667 |
166 | Develop | git 브런치 배우기 (링크) | hooni | 2013.07.09 | 20702 |