지역변수와 전역변수
우리동네(지역변수)를 먼저보고 없으면 전역변수로 이동한다
#include <iostream>
int x{5}; //global variable 전역변수
void DoSomeThing()
{
x = 1;
}
void DoSomeThing1()
{
x = 2;
}
int main()
{
std::cout << x << std::endl;
DoSomeThing();
std::cout << x << std::endl;
DoSomeThing1();
std::cout << x << std::endl;
}
출력 결과는 5(전역변수) 1(두썸띵) 2(두썸띵1)
#include <iostream>
int x{5}; //global variable 전역변수
void DoSomeThing()
{
x = 1;
}
void DoSomeThing1()
{
int {};
x = 2;
}
int main()
{
std::cout << x << std::endl;
DoSomeThing();
std::cout << x << std::endl;
DoSomeThing1();
std::cout << x << std::endl;
}
// 출력 결과는 5(전역변수) 1(두썸띵) 2(두썸띵1-2로 초기화)
하지만 전역변수는 버그의 위험이 있기 때문에 일단 사용x
만약에 사용하고 싶다면?
#include <iostream>
void DoSomeThing()
{
int x{2};
}
void DoSomeThing1()
{
int x{1};
}
int main()
{
int x;
DoSomeThing(x);
DoSomeThing1(x);
}
하지만 없어도 프로그래밍 가능하지 사용하지 말자
또다른 방법
extern int x;//소스파일 외부의 x를 가져올 수 있음
변수의 스코프 (variable's scope)
local 변수
global 변수 - 사용 금지
extern 변수 - 사용 금지
static variable (정적 변수) : static 변수선언문;
최초 1회만 초기화되고, 앱 종료시까지 살아 있는 변수
하지만 범위로 따지면 엄연히 지역변수
지역변수의 성질을 가지면서 전역변수의 기능을 함
지역변수의 단점을 극복하는 기능
전역변수의 대안
void DoSomeThing()
{
static int x{}; // 이 지역 안에서만 x에 접근 가능
x ++;
std::cout << x << std::endl;
}
int main()
{
DoSomeThing();
DoSomeThing();
DoSomeThing();
}
//결과 : 1 2 3
은행 대기표 발권 코드를 짜보자 : static(정적) 변수의 기능을 활용
int GetWaitingNumber()
{
static int number{ 1 };
return number++;
}
int main()
{
for (int i = 0; i <1000 ; i++)
{
std::cout << "대기자는:" << GetWaitingNumber() << std::endl;
}
}