지역변수와 전역변수
우리동네(지역변수)를 먼저보고 없으면 전역변수로 이동한다

#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;
	}
}
profile
공부 기록용

0개의 댓글