5. 외부 변수(External variable)
외부 변수는 선언된 이후의 모든 함수에서 사용할 수 있는 변수를 말합니다.
외부 변수는 함수의 어느 곳에서든 지 선언될 수 있으며 프로그램의 어느 부분에서건 사용될 수 있는 변수를 말합니다.
외부 변수는 선언되는 순간 메모리의 특정 영역에 저장되어 프로그램이 실행되는 동안 계속해서 존재하게 됩니다.
외부변수는 선언되는 순간 0으로 자동적으로 초기화 됩니다.
만일 현재 작성중인 파일 내에서만 외부 변수를 사용하고자 하는 경우에는 함수의 머리 부에 반드시 선언해야 합니다.
선언된 이후에는 어느 부분에서든 사용 가능합니다.
외부 변수는 주로 파일간에 변수를 공유할 목적으로 이용됩니다.
외부 변수의 특징
키워드: extern
유효범위: 프로그램 전체
프로그램 전반에 걸쳐 값을 그대로 유지합니다.
초기화는 자동적으로 이루어집니다.
문자인 경우에는 null 정수 형인 경우는 0, 실수 형인 경우는 0.0으로 초기화 됩니다.
8-7) 실습예제 (외부 변수 사용 예제)
#include<stdio.h>
extern int su = 12;
void Sub(int x)
{
int z = 4;
printf("%d %d %d\n", x,z,su);
}
void main()
{
int a= 3;
{
int b= 5;
printf("%d %d %d\n", a,b,su);
}
Sub(9);
}
3 5 12
9 4 12
x, z는 Sub 함수 내에 선언 되었으므로 Sub 함수 안에서만 사용이 가능하며 a는 main 함수 안에서 선언되었으므로 main 함수 안에서만 사용이 가능합니다.
b는 b가 선언된 블록 내에서만 사용이 가능합니다.
하지만 su는 외부변수로 선언되었으므로 프로그램 내에서는 어디에서든지 사용이 가능합니다.
이렇게 하나의 파일에서만 보면 외부변수와 auto 변수를 전역으로 선언한 경우 차이점을 알 수 없습니다.
8-8) 여러 개의 파일을 가진 프로젝트 만들기와 다른 파일에 있는 외부 변수 이용하기
1. 아래와 같은 파일을 작성하고 extern.c로 저장
#include<stdio.h>
extern
int a;
void sub()
{
printf("a = %d\n", a );
a = a + 20;
printf("a = %d\n", a );
}
2. 아래와 같은 파일을 작성 main.c로 저장
#include<stdio.h>
void sub();
int a = 10;
void main( )
{
printf("a = %2d\n", a);
sub();
printf("a = %2d\n", a);
}
[project] – [add to project] – [files]에서 extern.c를 선택하면 됩니다. 8-9) 실습예제 (함수를 이용한 예금 관리)
#include<stdio.h>
int money=0;
void input()
{
int m;
printf("얼마입금하겠습니까?");
scanf("%d",&m);
money+=m;
printf("입금되었습니다.\n" );
printf("현재잔액은%d입니다.\n",money);
}
void view()
{
printf("현재잔액은%d원입니다.\n",money);
}
void output()
{
int m;
while(1)
{
printf("얼마를찾겠습니까");
scanf("%d",&m);
if(money>m)
break;
printf("잔액이부족합니다.\n");
}
printf("%d원출금되었습니다.\n",m);
printf("현재잔액은%d원입니다.\n\n",money-=m);
}
int main()
{
int menu;
while(1)
{
printf("**예금관리**\n");
printf("1.입금\t 2.잔액조회\t 3.예금출금\t 4. 종료\n");
printf("메뉴를선택하세요:");
scanf("%d",&menu);
if(menu==4) break;
else
if (menu<1 || menu>4)
{ printf("잘못된메뉴를선택하셨습니다\n");
continue;
}
switch(menu)
{
case 1: input();break;
case 2: view();break;
case 3: output();break;
}
}
return 0;
}
[프로그래밍] 7. #include (0) | 2016.10.06 |
---|---|
[프로그래밍] 6. 전 처리문의 종류 (0) | 2016.10.06 |
[프로그래밍] 4. 정적 변수(Static variable) (0) | 2016.10.05 |
[프로그래밍] 3. 레지스터변수(Resister variable) (0) | 2016.10.02 |
[프로그래밍] 2. 자동변수(automatic variable) (0) | 2016.10.01 |