변수 범위
Coddy의 C 언어 함수 코스 레슨 — 17개 중 5번째.
각 변수는 스코프(scope)를 가지며, 이는 프로그램에서 해당 변수를 사용할 수 있는 부분입니다. 변수는 전역(global) 또는 지역(local) 변수가 될 수 있습니다.
지역 변수
지역 변수는 함수와 같은 코드 블록 내부에서 생성되며, 그 안에서만 존재합니다. 이러한 변수들을 위한 메모리는 블록이 시작될 때 할당(allocated)되고, 블록이 끝날 때 해제(deallocated)되어 변수가 제거됩니다.
#include <stdio.h>
void message() {
char *msg = "Coddy";
printf("%s \n", msg);
}
int main(void) {
char *title = "tech";
message();
printf("%s \n", title);
return 0;
}message 함수에서는 msg 변수가 정의되어 있습니다. 마찬가지로, main 함수는 title 변수를 정의합니다. 이 변수들은 각각의 함수 외부에서는 사용할 수 없습니다. 예를 들어, msg 변수의 스코프는 message 함수로 제한되어 있기 때문에 main 함수에서 사용할 수 없습니다.
동일한 원칙이 if, else, switch, case, for, while, do..while 루프와 같은 중첩된 코드 블록 내에 정의된 변수에도 적용됩니다.
전역 변수
전역 변수는 프로그램 파일 내의 모든 함수 외부에서 정의됩니다. 이 변수들은 해당 파일 내의 어떤 함수에서도 사용될 수 있습니다.
#include <stdio.h>
int a = 12;
void increment()
{
a++;
printf("a=%d \n", a);
}
int main(void)
{
increment();
a++;
printf("a=%d \n", a);
return 0;
}출력 결과:
a=13
a=14 여기서 변수 a는 전역적으로 선언되었기 때문에 모든 함수에서 접근할 수 있습니다.
챌린지
쉬움전역 변수를 사용해 보세요:
- 어떤 함수 밖에서도
<strong>gv</strong>라는 이름의 전역 변수를 정의하고 20이라는 값을 할당하세요. - 이 전역 변수를 사용하도록
increment함수를 수정하세요. - 전역 변수를 감소시키고 그 값을 출력하는 새로운 함수
decrement를 작성하세요. main함수에서 변수의 값을 출력하세요.
출력은 다음과 같아야 합니다:
Global variable after increment: 21
Global variable after decrement: 20
Global variable in main: 20 직접 해보기
#include <stdio.h>
// gv라는 이름의 전역 변수를 정의하고 값 20을 할당합니다
// increment 함수를 수정합니다
void increment() {
printf("Global variable after increment: %d \n", gv);
}
// decrement 함수를 정의합니다
int main(void) {
increment();
decrement();
// 변수를 출력합니다
return 0;
}