cpp_static_global - 8BitsCoding/RobotMentor GitHub Wiki

static / global / extern 비ꡐ

static: μ „μ—­λ³€μˆ˜, ν•΄λ‹Ή μ†ŒμŠ€νŒŒμΌλ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜κ²Œ μ“°κ² λ‹€. extern : μ „μ—­λ³€μˆ˜, λ‹€λ₯Έ μ†ŒμŠ€μ—μ„œλ„ 인식할 수 있게 μ“°κ² λ‹€.

μš”μ μ€ static μ „μ—­λ³€μˆ˜λ‘œ μ„ μ–Έν•˜λ©΄, λ‹€λ₯Έ μ†ŒμŠ€νŒŒμΌμ—μ„œλŠ” κ·Έ λ³€μˆ˜λ₯Ό 직접 λ°”κΏ€ μˆ˜λ„, μ•Œ μˆ˜λ„ μ—†λ‹€.

ν•˜μ§€λ§Œ static μ „μ—­λ³€μˆ˜λ₯Ό μ„ μ–Έν•œ μ˜€λΈŒμ νŠΈμ—μ„œ 이 λ³€μˆ˜λ₯Ό λ°”κΏ€ 수 μžˆλŠ” ν•¨μˆ˜λ₯Ό μ œκ³΅ν•œλ‹€λ©΄, λ‹€λ₯Έ μ˜€λΈŒμ νŠΈμ—μ„œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” λ°©μ‹μœΌλ‘œ μ „μ—­λ³€μˆ˜μ˜ 값을 λ°”κΏ€ 수 μžˆλ‹€.


// main.cpp
extern int global_var;

void main()
{
    global_var = 99;
    Sub s;

    printf("%d\n", global_var);
    // 100 좜λ ₯
}

// sub.cpp
int global_var;
// μ‚¬μš©ν• λ•ŒλŠ” extern μ‚¬μš©κΈˆμ§€

class Sub{
public:
    Sub() {
        global_var = 100;
    }
};



// main.cpp
static int global_var;

void main()
{
    global_var = 99;
    Sub s;

    printf("%d\n", global_var);
    // 99 좜λ ₯
}

// sub.cpp
int global_var;
// μ‚¬μš©ν• λ•ŒλŠ” extern μ‚¬μš©κΈˆμ§€

class Sub{
public:
    Sub() {
        global_var = 100;
    }
};

μ°Έκ³ μ‚¬μ΄νŠΈ