Skip to content

Commit 16751be

Browse files
committed
docs: C프로그래밍 활용 06
- 지역 변수와 전역 변수의 개념과 특징을 설명
1 parent d9e6c46 commit 16751be

File tree

1 file changed

+142
-0
lines changed
  • docs/C프로그래밍-활용

1 file changed

+142
-0
lines changed

docs/C프로그래밍-활용/06.md

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
---
2+
sidebar_position: 7
3+
title: 변수의 영역
4+
description: 지역 변수와 전역 변수의 개념과 특징을 설명
5+
---
6+
7+
## 1. 핵심 개념: 변수의 범위 (Variable Scope)
8+
9+
변수의 범위는 **변수가 선언된 위치**에 따라 프로그램 내에서 해당 변수에 접근하고 사용할 수 있는 영역을 의미합니다.
10+
C 언어에서는 크게 두 가지 주요 변수 범위가 있습니다: **지역 변수****전역 변수**.
11+
12+
---
13+
14+
### 1.1. 지역 변수 (Local Variables)
15+
16+
- **정의:**
17+
함수 내부 또는 블록 안에서 선언되는 변수입니다.
18+
19+
- **유효 기간:**
20+
선언된 함수나 블록이 종료되면 소멸됩니다.
21+
22+
- **유효 범위:**
23+
해당 함수 또는 블록 내에서만 유효합니다.
24+
25+
- **예시:**
26+
`main()` 함수 내에서 선언된 변수는 `main()`이 종료될 때까지,
27+
중괄호 `{}` 블록 내에서 선언된 변수는 해당 블록이 종료될 때까지 유효합니다.
28+
29+
- **중요:**
30+
> 저장된 주소가 다르면 변수의 이름이 같아도 다른 값을 가집니다.
31+
> 즉, 다른 블록 내에서 동일한 이름의 지역 변수를 선언할 수 있으며, 이들은 서로 독립적인 변수로 취급됩니다.
32+
33+
---
34+
35+
### 1.2. 전역 변수 (Global Variables)
36+
37+
- **정의:**
38+
함수 외부에서 선언하여 프로그램의 어느 곳에서든 접근할 수 있는 변수입니다.
39+
40+
- **유효 기간:**
41+
프로그램이 종료될 때까지 유효합니다.
42+
43+
- **유효 범위:**
44+
프로그램 전체에서 유효하며, 모든 함수에서 공유하여 사용할 수 있습니다.
45+
46+
---
47+
48+
## 2. 핵심 개념: 변수의 저장 유형 지정자 (Storage Class Specifiers)
49+
50+
저장 유형 지정자는 변수의 **저장 방식, 유효 범위, 생존 기간**을 제어합니다.
51+
52+
### 2.1. `auto`
53+
54+
- **특징:**
55+
보통 생략되며, 지역 변수 선언 시 사용됩니다. (지역 변수의 기본 저장 유형)
56+
- **작동 방식:**
57+
함수나 블록이 실행될 때 메모리가 할당되고, 종료 시 해제됩니다.
58+
59+
### 2.2. `static`
60+
61+
- **특징:**
62+
- 지역 변수가 정적으로 변환됨
63+
- 프로그램 종료 전까지 변수의 변경된 값을 저장함
64+
- 함수가 여러 번 호출되어도 값이 유지됨
65+
- **작동 방식:**
66+
한 번 초기화된 후 함수 호출이 끝나도 값이 유지됩니다.
67+
(특정 함수의 호출 간에 상태를 유지해야 할 때 유용)
68+
69+
### 2.3. `register`
70+
71+
- **특징:**
72+
변수가 CPU 레지스터에 저장되어 빠르게 처리됨
73+
- **작동 방식:**
74+
컴파일러에게 해당 변수를 가능한 한 CPU 레지스터에 저장하도록 요청
75+
(실제 레지스터에 저장될지는 컴파일러의 판단에 따름)
76+
77+
---
78+
79+
## 3. 코드 예시 분석
80+
81+
아래 코드는 변수의 범위와 저장 유형 지정자의 동작을 명확하게 보여줍니다.
82+
83+
```c
84+
#include <stdio.h>
85+
86+
int i = 1; // 1) 전역 변수
87+
88+
int main() {
89+
int i = 1; // 2) 자동 변수 (main 함수의 지역 변수)
90+
printf("첫번째 i=%d\n", i); // main 내의 i 출력 (값: 1)
91+
92+
{
93+
register int i = 2; // 3) 레지스터 변수 (블록 내의 지역 변수)
94+
printf("두번째 i=%d\n", i); // 블록 내의 i 출력 (값: 2)
95+
}
96+
97+
printf("첫번째 i=%d\n", i); // 블록을 벗어나면 다시 main 내의 i 출력 (값: 1)
98+
return 0;
99+
}
100+
101+
void iChange() {
102+
static int i = 1; // 4) static 변수 (iChange 함수의 지역 변수, 값이 유지됨)
103+
printf("i=%d\n", i);
104+
i++;
105+
}
106+
107+
void iGlobal() {
108+
printf("global i= %d\n", i); // 전역 변수 i에 접근 (값: 1)
109+
}
110+
```
111+
112+
#### 예시 설명
113+
114+
- **전역 변수 `i=1`** : 프로그램 전체에서 유효. `iGlobal()` 함수에서 접근 가능
115+
- **main 함수 내의 지역 변수 `i=1`** : main 함수 내에서만 유효, 전역 변수와 이름이 같아도 다른 메모리 공간 사용
116+
- **블록 내의 지역 변수 `register int i=2`** : 해당 블록 내에서만 유효, 블록을 벗어나면 소멸
117+
- **iChange 함수 내의 static 변수** : 함수 내에서만 유효하지만, static 덕분에 함수 호출이 끝나도 값이 유지됨
118+
119+
---
120+
121+
## 4. `time.h` 라이브러리 (참고)
122+
123+
C 언어에서 **날짜와 시간**을 얻거나 조작할 수 있는 표준 라이브러리입니다.
124+
125+
- **주요 함수**
126+
- `clock()` : 프로그램 시작부터 경과된 시간을 밀리초(ms) 단위로 반환
127+
- `time_t time()` : 현재 시간을 타임스탬프(Unix epoch 이후 초 단위)로 반환
128+
129+
> 정보 업데이트 로그 등에 적합합니다.
130+
131+
---
132+
133+
## 5. 결론
134+
135+
변수의 **유효 범위(지역/전역)****저장 유형 지정자(auto, static, register)**
136+
C 프로그래밍에서 변수의 생명주기, 접근성 및 성능을 제어하는 데 필수적인 개념입니다.
137+
138+
- 지역 변수는 함수나 블록 내에서 독립성을 보장
139+
- 전역 변수는 프로그램 전체에서 공유되는 데이터를 다룰 때 사용
140+
- static, register와 같은 저장 유형 지정자는 특정 변수에 대한 저장 방식과 생존 기간을 세밀하게 제어
141+
142+
이들을 이해하고 적절히 활용하는 것은 효율적이고 안정적인 코드를 작성하는 데 매우 중요합니다.

0 commit comments

Comments
 (0)