ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•
κΈ°μ–΅ 클래슀 μ§€μ •μž(Storage class specifiler)λŠ” λ³€μˆ˜λ₯Ό μœ„ν•œ κΈ°μ–΅μž₯치 ν• λ‹Ή κ΄€λ¦¬μ˜ νš¨μœ¨μ„±μ„ λ‹΄λ‹Ήν•œλ‹€. λ˜ν•œ λ©”λͺ¨λ¦¬, λ ˆμ§€μŠ€ν„°, μŠ€νƒ λ“± 어디에 ν• λ‹Ήν•˜λŠλƒμ— 따라 scope와 life time이 λ‹¬λΌμ§€κ²Œ λœλ‹€. λ”°λΌμ„œ 각 κΈ°μ–΅ ν΄λž˜μŠ€μ— λŒ€ν•œ νŠΉμ§•μ„ λͺ…ν™•νžˆ μ•Œκ³  μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것이 μ’‹λ‹€.

 

auto

 ν”νžˆ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ‘œ, 아무것도 μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ `auto` ν‚€μ›Œλ“œκ°€ λΆ™κ²Œ λœλ‹€. μ΄λŠ” μ„ μ–Έλœ μ˜μ—­ λ˜λŠ” ν•¨μˆ˜λ₯Ό λ²—μ–΄λ‚˜λ©΄ μ‚¬λΌμ§€κ²Œ 되며, μ‹€ν–‰ μ€‘μ—λŠ” λ©”λͺ¨λ¦¬μ˜ `stack`에 μœ„μΉ˜ν•˜κ²Œ λœλ‹€.

 

register

 ν•΄λ‹Ή ν‚€μ›Œλ“œλ₯Ό μ§€μ •ν•œ λ³€μˆ˜λ₯Ό CPU의 `register`에 μ €μž₯ν•˜λ„λ‘ μš”μ²­ν•  λ•Œ μ‚¬μš©ν•œλ‹€. μ΄λŠ” μ»΄νŒŒμΌλŸ¬μ— 따라 μ‚¬μš©μžκ°€ `register`라고 λͺ…μ‹œν•˜μ˜€μŒμ—λ„ λΆˆκ΅¬ν•˜κ³  `auto`둜 취급될 μˆ˜λ„ μžˆλ‹€. λ§Œμ•½ `regsiter`둜 μ„ μ–Έλœλ‹€λ©΄ μ£Όμ†Œκ°€ 없기에 `&`μ—°μ‚°μžκ°€ ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€.

 

static

 μ΄ ν‚€μ›Œλ“œλŠ” `auto`와 달리 ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λ˜λŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ±°λ‚˜, ν•¨μˆ˜ μ•žμ— λΆ™μ΄κ²Œ 되면 ν•¨μˆ˜κ°€ μ„ μ–Έλœ νŒŒμΌλ‚΄μ—μ„œλŠ” μ ‘κ·Ό κ°€λŠ₯ν•˜μ§€λ§Œ λ‹€λ₯Έ νŒŒμΌμ—μ„œλŠ” ν•¨μˆ˜μ— μ ‘κ·Όν•  수 없도둝 ν•œλ‹€. `auto` λ³€μˆ˜μ˜ 경우 μ΄ˆκΈ°ν™”κ°€ λ˜μ§€ μ•Šμ§€λ§Œ, `static` λ³€μˆ˜μ˜ 경우 μžλ™μœΌλ‘œ 0으둜 μ΄ˆκΈ°ν™”λœλ‹€. 

 

extern

 μ΄λŠ” λ‹€λ₯Έ νŒŒμΌμ—μ„œ μ •μ˜λœ λ³€μˆ˜λ‚˜ ν•¨μˆ˜λ₯Ό μ°Έμ‘°ν•œλ‹€λŠ” 의미λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. ν•¨μˆ˜μ˜ 경우 λ‹€λ₯Έ νŒŒμΌμ— μ„ μ–Έλœ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ²Œ 되면 μžλ™μ μœΌλ‘œ `extern`이 λœλ‹€. λ”°λΌμ„œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μ°Έμ‘°ν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜λ €λ©΄ `static`μ΄λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀.

 

728x90
λ°˜μ‘ν˜•

'πŸ™‹β€β™‚οΈ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ > C' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

C: thread safe and reentrant  (0) 2021.01.26
C: Memory Layout of C Programs  (0) 2021.01.26
C: fork()  (0) 2020.11.25
C: 동적 ν• λ‹Ήκ³Ό ν™œμš©  (0) 2020.11.20
C: Generic Coding  (0) 2020.11.18
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€