안녕하십니까. 김동우입니다.
이번 강의는 분량이 많음에 따라 분리하여 작성하기로 했습니다.
그래서 이번 노트에서는 global, static, 이전에 배웠던 전방선언에 대해 작성하고자 합니다.
코드부터 올리겠습니다.
#include <iostream>
using namespace std;
int value = 123; // global
// 다른 cpp 파일에서도 value 라는 변수에 접근할 수 있다.
static int g_a = 1;
// static global variables는 타 cpp 파일에서 접근할 수 없다.
// 그런데 굳이 static을 global로 선언할 필요가 있을까,,,? (생각)
void textPrint(); // forward declaration
void doSomething()
{
int a = 1; // 메모리를 사용한 다음 os에 반납한다. 호출 시 다시 할당받는다.
// 다음 호출에서도 초기화가 동일하게 진행된다.
static int b = 1;
// static이 뭘까? 단순하게 정적이다?
// a가 os로부터 받은 메모리가 static, 변동이 없다. 주소도, 크기도.
// 또한 초기화를 최초 1회만 진행한다. -> 즉, 초기화가 정의에 필수적이다.
// 메모리에 남겨진 기록이 있기 때문에 해당 변수와 값을 재사용한다.
// 현재 블럭 외부에서 local variables 변수에 접근하기는 상당히 어렵다.
// -> 복잡한 포인터 사용 시 가능
++a;
++b;
cout << a << " " << b << endl;
}
int main()
{
cout << value << endl; // output : 123
int value = 1; // name hiding or shadowing, local > global
cout << ::value << endl; // output : 123
// 영역연산자, global variables call
cout << value << '\n' << endl; // output : 1
doSomething(); // output : 2 2
doSomething(); // output : 2 3
doSomething(); // output : 2 4
doSomething(); // output : 2 5
textPrint();
return 0;
}
#include <iostream>
void textPrint()
{
using namespace std;
cout << "Text from test.cpp" << endl;
}
그럼 이만 마치도록 하겠습니다. 감사합니다.