C : Variable and Data Type πŸ•

m_ngyeongΒ·2024λ…„ 9μ›” 30일
0

C

λͺ©λ‘ 보기
5/16
post-thumbnail

Variable and Data Type


🌱 Local Variable(지역 λ³€μˆ˜)

  • μ •μ˜: 지역 λ³€μˆ˜λŠ” νŠΉμ • ν•¨μˆ˜λ‚˜ 블둝 λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜μ΄λ‹€. ν•΄λ‹Ή ν•¨μˆ˜λ‚˜ 블둝 λ‚΄μ—μ„œλ§Œ μ‚¬μš©ν•  수 있으며, 블둝을 λ²—μ–΄λ‚˜λ©΄ λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œλœλ‹€.
  • 수λͺ…: 지역 λ³€μˆ˜λŠ” ν•¨μˆ˜κ°€ 호좜될 λ•Œ μƒμ„±λ˜κ³ , ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ©΄ μ†Œλ©Έν•œλ‹€.
  • μŠ€μ½”ν”„: λ³€μˆ˜κ°€ μ„ μ–Έλœ 블둝 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.
#include <stdio.h>

void func() {
    int localVar = 10;  // 지역 λ³€μˆ˜
    printf("localVar: %d\n", localVar);
}

int main() {
    func();
    printf("%d", localVar);  // 였λ₯˜: localVarλŠ” ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό λΆˆκ°€
    return 0;
}

β†’ error: 'localVar' undeclared (first use in this function)

🌱 Global Variable(μ „μ—­ λ³€μˆ˜)

  • μ •μ˜: μ „μ—­ λ³€μˆ˜λŠ” ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λ‘œ, ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“  ν•¨μˆ˜μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.
  • 수λͺ…: ν”„λ‘œκ·Έλž¨μ΄ μ‹œμž‘λ  λ•Œ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλ˜κ³ , ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λœλ‹€.
  • μŠ€μ½”ν”„: ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ ‘κ·Όν•  수 μžˆλ‹€.
#include <stdio.h>

int globalVar = 100;  // μ „μ—­ λ³€μˆ˜

void func() {
    printf("globalVar: %d\n", globalVar);
}

int main() {
    printf("globalVar: %d\n", globalVar);  // μ „μ—­ λ³€μˆ˜ μ ‘κ·Ό κ°€λŠ₯
    func();  // μ „μ—­ λ³€μˆ˜λŠ” λ‹€λ₯Έ ν•¨μˆ˜μ—μ„œλ„ μ ‘κ·Ό κ°€λŠ₯
    return 0;
}

β†’ globalVar: 100
β†’ globalVar: 100

🌱 static Variable(static λ³€μˆ˜)

static ν‚€μ›Œλ“œλŠ” λ³€μˆ˜μ˜ 수λͺ…κ³Ό μŠ€μ½”ν”„λ₯Ό μ œμ–΄ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

static λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” 두 가지 μ£Όμš” 상황은 λ‹€μŒκ³Ό κ°™λ‹€ :

static Local Variable

  • μ •μ˜: static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œ 지역 λ³€μˆ˜λŠ” ν•¨μˆ˜ 내에 μ„ μ–Έλ˜μ§€λ§Œ, κ·Έ 값은 ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λœλ‹€. λ‹€μ‹œ ν•¨μˆ˜κ°€ 호좜될 λ•Œ, 이전 값을 κΈ°μ–΅ν•˜κ³  μžˆλ‹€.
  • 수λͺ…: ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λœλ‹€.
  • μŠ€μ½”ν”„: ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.
#include <stdio.h>

void counter() {
    static int count = 0;  // static 지역 λ³€μˆ˜
    count++;
    printf("count: %d\n", count);
}

int main() {
    counter();  // count: 1
    counter();  // count: 2 (이전 값을 기얡함)
    counter();  // count: 3
    return 0;
}

static Global Variable

  • μ •μ˜: static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œ μ „μ—­ λ³€μˆ˜λŠ” ν•΄λ‹Ή 파일 λ‚΄μ—μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλŠ” μ „μ—­ λ³€μˆ˜κ°€ λœλ‹€. λ‹€λ₯Έ νŒŒμΌμ—μ„œ 이 λ³€μˆ˜λ₯Ό μ ‘κ·Όν•  수 μ—†λ‹€.
  • 수λͺ…: ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λœλ‹€.
  • μŠ€μ½”ν”„: λ³€μˆ˜κ°€ μ„ μ–Έλœ 파일 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.
#include <stdio.h>

static int globalVar = 50;  // static μ „μ—­ λ³€μˆ˜ (이 파일 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯)

void func() {
    printf("globalVar: %d\n", globalVar);
}

int main() {
    func();
    return 0;
}

μš”μ•½

#include <stdio.h>

// μ „μ—­ λ³€μˆ˜ μ„ μ–Έ
int globalVar = 0;

void testFunction() {
    // 지역 λ³€μˆ˜ μ„ μ–Έ (맀번 ν•¨μˆ˜κ°€ 호좜될 λ•Œλ§ˆλ‹€ μƒˆλ‘œ μ΄ˆκΈ°ν™”λ¨)
    int localVar = 0;

    // static 지역 λ³€μˆ˜ μ„ μ–Έ (μ΄ˆκΈ°ν™”λŠ” ν•œ 번만 μˆ˜ν–‰λ˜κ³ , ν•¨μˆ˜ 호좜이 λλ‚˜λ„ 값이 μœ μ§€λ¨)
    static int staticVar = 0;

    // λ³€μˆ˜ κ°’ 증가
    localVar++;
    staticVar++;
    globalVar++;

    // 좜λ ₯
    printf("localVar: %d, staticVar: %d, globalVar: %d\n", localVar, staticVar, globalVar);
}

int main() {
    printf("Initial globalVar: %d\n", globalVar);
    
    // ν•¨μˆ˜ 1번째 호좜
    testFunction();  // 좜λ ₯: localVar: 1, staticVar: 1, globalVar: 1
    
    // ν•¨μˆ˜ 2번째 호좜
    testFunction();  // 좜λ ₯: localVar: 1, staticVar: 2, globalVar: 2
    
    // ν•¨μˆ˜ 3번째 호좜
    testFunction();  // 좜λ ₯: localVar: 1, staticVar: 3, globalVar: 3

    return 0;
}
Initial globalVar: 0
localVar: 1, staticVar: 1, globalVar: 1
localVar: 1, staticVar: 2, globalVar: 2
localVar: 1, staticVar: 3, globalVar: 3
  • 지역 λ³€μˆ˜: ν•¨μˆ˜λ‚˜ 블둝 λ‚΄μ—μ„œ μ„ μ–Έλ˜μ–΄ κ·Έ 블둝 λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜κ³ , ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ©΄ μ†Œλ©Έ.
  • μ „μ—­ λ³€μˆ˜: ν•¨μˆ˜ 외에 μ„ μ–Έλ˜μ–΄ ν”„λ‘œκ·Έλž¨ λ‚΄ μ–΄λ””μ„œλ“  접근이 κ°€λŠ₯ν•˜λ©°, ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ 값이 μœ μ§€λ¨.
  • static λ³€μˆ˜: λ©”λͺ¨λ¦¬μ— ν•œ 번만 ν• λ‹Ή.
    • static 지역 λ³€μˆ˜: ν•¨μˆ˜ λ‚΄μ—μ„œ μ„ μ–Έλ˜μ§€λ§Œ, ν•¨μˆ˜λ₯Ό λΉ μ Έλ‚˜κ°€λ„ μ†Œλ©Έν•˜μ§€ μ•Šκ³  값을 μœ μ§€.
    • static μ „μ—­ λ³€μˆ˜: μ „μ—­ λ³€μˆ˜μ§€λ§Œ μ„ μ–Έλœ 파일 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯.


profile
μ‚¬μš©μž κ²½ν—˜ ν–₯상과 지속적인 μ„±μž₯을 μΆ”κ΅¬ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ 개발자 ΚšΘ‰Ιž

0개의 λŒ“κΈ€