따배씨++ (4-2.1 global/static variables & forward declaration)

김동우·2021년 4월 16일
0

안녕하십니까. 김동우입니다.

이번 강의는 분량이 많음에 따라 분리하여 작성하기로 했습니다.

그래서 이번 노트에서는 global, static, 이전에 배웠던 전방선언에 대해 작성하고자 합니다.

코드부터 올리겠습니다.

  1. main.cpp
#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;
}
  1. test.cpp
#include <iostream>

void textPrint()
{
    using namespace std;

    cout << "Text from test.cpp" << endl;
}

그럼 이만 마치도록 하겠습니다. 감사합니다.

0개의 댓글

관련 채용 정보