β 1. λ§€κ°λ³μλ₯Ό ν΅ν μλ£ μ λ¬
(1) ν¨μμ νΈμΆκ³Ό μλ£ μ λ¬
- ν¨μ νΈμΆ: μ²λ¦¬μ νμν μλ£λ₯Ό νΌνΈμΆ ν¨μμ λ§€κ°λ³μμ μ λ¬ν¨ -> sum(10, 20);
- 볡κ·: μ²λ¦¬ κ²°κ΄κ°μ ν¨μ νΈμΆμμ κ°μΌλ‘ λ°νν¨ -> return z;
(2) κ°μ μν μλ£ μ λ¬
- C μΈμ΄μ κΈ°λ³Έμ μΈ μλ£ μ λ¬ λ°©μμ΄λ€.
- C μΈμ΄λ ν¨μλ₯Ό νΈμΆμ λ§€κ°λ³μ μ λ¬μ μ€ λ§€κ°λ³μμ κ°μ νμ λ§€κ°λ³μμ 볡μ¬νλ λ°©μμΌλ‘ λμν¨.
- μ΄μ λ, μ€ λ§€κ°λ³μμ νμ λ§€κ°λ³μμ 곡κ°μ΄ λ€λ₯΄κΈ° λλ¬Έμ κ°λ§ 볡μ¬ν΄μ λ£μ΄μ£Όλ κ²μ. μ¦, μ£Όμκ°μ΄ λ¬λΌμμ.
- μ¦, λ³μκ°μ μ£Όμκ°μ΄ λ€λ₯Έλ°, μλ‘ μν₯μ λ°μ§ μλλ‘ νκΈ° μν΄μ 볡μ¬λ₯Ό νλ κ²μ.
(3) μ°Έμ‘°μ μν μλ£ μ λ¬
#include <stdio.h>
void modify(int *ptr) {
*ptr = 99; // ptrμ΄ κ°λ¦¬ν€λ μ£Όμ(μλ³Έ λ³μ)μ 99 μ μ₯
}
int main() {
int num = 5;
modify(&num); // numμ μ£Όμλ₯Ό μ λ¬
printf("num = %d\n", num);
return 0;
}
- C μΈμ΄μμλ μ§μ μ§μνμ§λ μμ§λ§, ν¬μΈν°λ₯Ό μ΄μ©νμ¬ μ μ¬ν μ²λ¦¬λ₯Ό ν μ μμ.
- μ€ λ§€κ°λ³μμ κ°μ΄ λ€μ΄ μλ κ³³μ μ£Όμλ₯Ό νμ λ§€κ°λ³μμ μ λ¬νλ λ°©μμ.
- μ£Όμλ₯Ό μ λ¬νκΈ° μν΄ νμ λ§€κ°λ³μλ₯Ό 'ν¬μΈνΈ' νμΌλ‘ μ μΈμ ν΄μΌ λ¨.
- νΌνΈμΆ ν¨μμμ νμ λ§€κ°λ³μλ₯Ό μ¬μ©νλ κ²μ μ€ λ§€κ°λ³μλ₯Ό μ§μ μ¬μ©νλ κ²κ³Ό λμΌνκ² λ¨.
- μ¦, μλ³Έ μ£Όμκ°μ νμ λ§€κ°λ³μλ‘ μ£ΌκΈ° λλ¬Έμ μμ μ΄ μΌμ΄λλ©΄ μ€ λ§€κ°λ³μμλ μν₯μ΄ μμ μ μμ.
- μ½κ²λ§ν΄, ꡬ쑰체λ μ¬λ¬ μλ£λ₯Ό ν¬ν¨ν ꡬ쑰μΈλ°, μ©λμ΄ ν΄ μ μμ.
- κ·Έλμ μ©λμ΄ ν° μΈμλ₯Ό μ λ¬ν λ κ°μ΄ μλ μ°Έμ‘°μ μν μλ£ μ λ¬ μ¦, μ£Όμλ₯Ό μ λ¬ν¨μΌλ‘μ¨ ν¨μ¨μ μ¬λ¦΄ μ μμ.
β 2. μ ν¨λ²μ
(1) μ ν¨λ²μ ( scope ) λ?
- μ ν¨λ²μλ λ³μλ ν¨μ λ±μ λͺ μΉμ μ¬μ©ν μ μλ μμμ μλ―Ένλ€.
- μ ν¨λ²μμ λν μΈλΆμ μΈ νλ¨ κΈ°μ€μ μ§μλ³μ, μ μλ³μ λ‘ λλλ€.
[ μ§μλ³μ (loccal variable) ]
- νΉμ λ²μ λ΄μμλ§ ν΅μ©λλ λ³μλ₯Ό μλ―Ένλ©°, μ μΈλ λΈλ‘μ΄λ ν¨μ λ΄μμλ§ μ¬μ©μ΄ κ°λ₯ν λ³μλ₯Ό μλ―Έν¨.
- λΈλ‘μ΄λ ν¨μ λ΄λΆμ μ μΈλ λ³μ, ν¨μ ν€λμ μ μΈλ νμ λ§€κ°λ³μ λν ν¬ν¨
[ μ μλ³μ (global variable) ]
- νλ‘κ·Έλ¨ μ 체μ κ±Έμ³ μ¬μ©λ μ μλ λ³μλ₯Ό μλ―Ένλ€.
- ν¨μ μΈλΆμ μ μΈλ λ³μλ‘ λ³Ό μ μμ.
- λμΌ νμΌ λ΄ λλ λ€λ₯Έ νμΌμ μ μΈλ μ μμ
- λͺ μμ μΌλ‘ μ΄κΈ°ννμ§ μμΌλ©΄ 0μΌλ‘ μλ μ΄κΈ°ν λ¨.
[ μ§μλ³μμ μ μλ³μ μ¬μ© ν ]
- κ°κΈμ μ΄λ©΄ μ§μλ³μλ₯Ό μ¬μ©νλ κ²μ κΆμ₯ν¨.
- μ΄μ λ ν¨μμ λ λ¦½μ± ν₯μ, λλ²κΉ μ΄ μ©μ΄ν¨, κΈ°μ΅κ³΅κ° μ μ½, μ¬κ·νΈμΆμ νλ ν¨μμ μμ± λ±μ μ©μ΄ν¨.
- μ μλ³μλ νλ‘κ·Έλ¨ μ λμ μ μΈνλ κ²μ κΆμ₯ν¨.
β 3. κΈ°μ΅ ν΄λμ€
(1) κΈ°μ΅ ν΄λμ€ ( storage class ) λ?
- κΈ°μ΅ ν΄λμ€λ, λ³μκ° λ©λͺ¨λ¦¬ μ΄λμ μ μ₯λλμ§, μΈμ μμ±λκ³ μΈμ μ¬λΌμ§λμ§(μλͺ μ£ΌκΈ°), κ·Έλ¦¬κ³ μ΄λμ μ κ·Όμ ν μ μλμ§ (λ²μ)λ₯Ό κ²°μ νλ μμ±μ μλ―Έν¨.
- μ½κ²λ§ν΄, λ³μμ μ‘΄μκΈ°κ°(μλͺ μ£ΌκΈ°), μ ν¨λ²μ, μ μ₯μμΉ λ±μ κ²°μ νλ κ°λ μ΄λ€.
- λν, λ³μκ° λ©λͺ¨λ¦¬μμ μ΄λ»κ² κΈ°μ΅λλκ°λ₯Ό λΆλ₯νλ κΈ°μ€μΌλ‘ κΈ°μ΅ ν΄λμ€λΌλ μ΄λ¦μ κ°μ§.
- CμΈμ΄μλ λνμ μΌλ‘ μλλ³μ, μ μ λ³μ, μΈλΆλ³μ, λ μ§μ€ν° λ³μ 4κ°μ§ κΈ°μ΅ ν΄λμ€κ° μμ.
- μλλ³μ: κΈ°λ³Έμ μΌλ‘ μ§μλ³μκ° μλλ³μμ ν΄λΉμ΄ λλ©°, μ§μλ³μμ λ³μλ₯Ό μ μΈνλ©΄ κΈ°λ³Έκ°μΈ auto λ‘ μ·¨κΈν¨.
- λ μ§μ€ν° λ³μ: CPUμ λ μ§μ€ν°μ μ μ₯νμ¬ μ κ·Ό μλλ₯Ό μ΅λν λΉ λ₯΄κ² νκ³ μ νλ μ§μ λ³μμ.
- μ μ λ³μ: νλ‘κ·Έλ¨ μ€ν λμ κ³μ μ μ§λλ λ³μλ₯Ό μλ―Έν¨.
- μΈλΆ λ³μ: λ€λ₯Έ νμΌμ΄λ λ€λ₯Έ λΈλ‘μμ μ μΈλ μ μλ³μλ₯Ό μ°Έμ‘°ν λ μ¬μ©νλ λ³μμ΄λ€.
(2) μλλ³μ
#include <stdio.h>
int sum(int, int);
int main() {
int result = sum(1, 2);
printf("%d", result);
}
int sum(int a, int b) {
auto int result = a + b; // auto μλ΅μ΄ κ°λ₯ν¨.
return result;
}
- μ§μλ³μμ μ μ©λ μ μλ κΈ°μ΅ ν΄λμ€μ΄λ€.
- μμ½μ΄ 'auto' λ₯Ό μ§μ νμ¬ μ μΈν΄ μ¬μ©μ ν μ μμ§λ§, λν΄νΈκ° auto μ΄λ―λ‘ μλ΅ν μ μμ.
- μ‘΄μκΈ°κ°(μλͺ μ£ΌκΈ°): μμ ν¨μ λλ λΈλ‘μ μ§μ ν λ μμ±λκ³ , λΉ μ Έλκ° λ μ κ±°κ° λ¨.
- μ ν¨λ²μ(μ κ·Όλ²μ): μμ ν¨μλ λΈλ‘ λ΄λΆ
- λͺ μμ μΌλ‘ μ΄κΈ°ννμ§ μμΌλ©΄ λ―Έμ§μ κ°μ κ°κ² λλ©°, μ μ ν μ΄κΈ°νλ₯Ό ν νμκ° μμ.
- μ 리νλ©΄, ν΄λΉ μλ λ³μλ μ§μλ³μ λ΄μμ μ μΈ λ λͺ¨λ λ³μμ λν΄νΈλ‘ λΆκ² λλ€. κ·Έλμ μλ΅μ΄ κ°λ₯ν¨.
(3) μ μ λ³μ
- μμ½μ΄ 'static' μ μ§μ νμ¬ μ μΈ ν μ μμ.
- μ‘΄μκΈ°κ°(μλͺ μ£ΌκΈ°): νλ‘κ·Έλ¨μ μμν λ μμ±λμ΄ νλ‘κ·Έλ¨μ λ§μΉ λκΉμ§ μ μ§κ° λ¨.
- [ μ μΈ μμΉλ³ μ ν¨λ²μ ]
- ν¨μλ λΈλ‘μ μ μΈ: μμ ν¨μ λλ λΈλ‘ λ΄μμλ§ μ¬μ©ν μ μμ. ( λ΄λΆμμλ§ μ κ·Όμ΄ κ°λ₯νλ€λ μλ―Έμ. )
- ν¨μ μΈλΆμ μ μΈ: μμ νμΌμμλ§ μ¬μ©ν μ μμ
- μ΄κΈ°κ°μ μ§μ νμ§ μμΌλ©΄ μλμ μΌλ‘ 0μΌλ‘ μ΄κΈ°νκ° λ¨.
- μμ κ°μ΄ static ν€μλλ₯Ό ν΅ν΄ μ μ λ³μλ₯Ό μ μΈν΄μ μ¬μ©μ ν μ μμ.
- ν΄λΉ μ½λλ test() ν¨μ λ΄λΆμ auto(μλλ³μ) μ static(μ μ λ³μ) λ κ°λ₯Ό μ μΈνμ¬ λΉκ΅λ₯Ό ν κ²μ΄λ€.
- auto λ μλͺ μ£ΌκΈ°κ° ν¨μκ° λλ λ μ¬λΌμ§κΈ° λλ¬Έμ λ°λ³΅μ κ²°κ³Όλ λ€ 0μ΄ λμ€κ² λλ€.
- λ°λ©΄ static μ ν¨μ λ΄μμ μ μΈμ΄ λμκΈ° λλ¬Έμ, μ κ·Ό λ²μλ ν΄λΉ ν¨μ λ΄λΆμμλ§ μ κ·Όμ΄ κ°λ₯νλ€.
- νμ§λ§, μλͺ μ£ΌκΈ°λ νλ‘κ·Έλ¨μ΄ λλ λ κΉμ§ μ ν¨νκΈ° λλ¬Έμ λ©λͺ¨λ¦¬μμ μ κ±°κ° λμ§ μκ³ μ μ§κ° λκ² λλ€.
- μ¦, κ²°κ³Όλ auto 0,0,0 static 0,1,2 κ° λμ€κ² λλ€.
(4) μΈλΆλ³μ
// file1.c
#include <stdio.h>
int count = 10; // μ μ λ³μ μ μ (μ€μ λ©λͺ¨λ¦¬ κ³΅κ° μμ±)
void increase() {
count++;
}
// file2.c
#include <stdio.h>
extern int count; // λ€λ₯Έ νμΌμ countλ₯Ό μ°Έμ‘° (μ μΈ)
void increase(); // λ€λ₯Έ νμΌμ ν¨μ μν μ μΈ
int main() {
printf("μ΄κΈ° count = %d\n", count); // 10 μΆλ ₯
increase(); // file1.cμ μλ ν¨μ νΈμΆ → count μ¦κ°
printf("μ¦κ° ν count = %d\n", count); // 11 μΆλ ₯
return 0;
}
// μ€ν κ²°κ³Ό
// μ΄κΈ° count = 10
// μ¦κ° ν count = 11
- μμ½μ΄ 'extern' μ μ§μ νμ¬ μ μΈν΄μ μ¬μ©μ ν μ μμΌλ©°, ν¨μ μΈλΆμμ μ μλ λ³μλΌλ κ²μ μλ―Έν¨.
- μ½κ²λ§ν΄, μ μλ³μμ μΈλΆλ³μλ κ±°μ λμΌν μλ―Έλ₯Ό κ°μ§κ³ μμ.
- μ μ λ³μμλ extern ν€μλ λν, auto μ§μλ³μμ λν΄νΈλ‘ λ£μ΄μ§κ²κ³Ό λμΌνκ² μλμΌλ‘ externμ΄ λΆμ.
- μ¦, μ μ λ³μλ μλμΌλ‘ externμ΄ λΆλλ€”λ λ§μ κ°λ μ μΌλ‘λ λ§μ§λ§, μΈμ΄μ μΌλ‘ externμ΄ μΆκ°λλ€λ λ»μ μλκ² λλ€.
- μ‘΄μκΈ°κ°(μλͺ μ£ΌκΈ°): staticκ³Ό λμΌνκ², νλ‘κ·Έλ¨μ μμν λ μμ±λμ΄ νλ‘κ·Έλ¨μ λ§μΉ λκΉμ§ μ μ§λ¨.
- μ ν¨λ²μ: νλ‘κ·Έλ¨ μ 체 λ²μ ( static μ μμ νμΌ λ΄λΆμμλ§ μ¬μ©μ΄ κ°λ₯ν¨. )
- λ€λ₯Έ νμΌμ μΈλΆλ³μλ‘ μ μΈλ λ³μλ₯Ό μ¬μ©ν μ μμ.
- μ΄κΈ°κ°μ μ§μ νμ§ μμΌλ©΄ μλμ μΌλ‘ 0μΌλ‘ μ΄κΈ°νκ° λ¨.
- μμ κ°μ κ³Όμ μ ν΅ν΄ μ»΄νμΌμ΄ μ§ν λκ³ , λ§μ»€κ° λ§νΉμ ν΄μ£Όκ² λλ€. κ·Έλ¬λ©΄ file1, file2κ° ν©μ³μ§κ² λ¨.
void increase(); // ν¨μ μν μ μΈ
- file2 μ ν¨μ μνμ μ μΈ ν΄λμ λΆλΆμ "μ΄λ° ν¨μκ° μ΄λκ° μμ κ±°μΌ" λΌκ³ μ½μλ§ νλ μ μμ.
- μ¦, μ»΄νμΌλ¬λ μ€μ ν¨μ μ μλ₯Ό λͺ°λΌλ μΌλ¨ "μ΄λ° ν¨μκ° μ‘΄μ¬νλ€"κ³ λ―Ώκ³ κΈ°κ³μ΄λ₯Ό μμ±νκ² λλ€.
- κ·Έλμ μ»΄νμΌμ ν΅κ³Όνκ² λ¨. κ·Έ ν, λ§μ»€κ° μ€νλ λ file1.o μμμ μ€μ λ‘ μ μλ increase() λ₯Ό μ°Ύμ μ°κ²°(link) νκ² λ¨.
- κ·ΈλΌμλ, #include λ₯Ό ν΅ν΄ ν€λνμΌμ μ°λ μ΄μ λ, ν€λ νμΌμ μ μΈ λ ν¨μλ€μ μ¬λ¬ μ»΄νμΌ λλ νμΌμμ ν€λλ§ λ±λ‘ν¨μΌλ‘μ¨ λͺ¨λ μ»΄νμΌ λλ νμΌλ€μ΄ μ μΈ μμ΄ μ΄μ©μ΄ κ°λ₯νλ―λ‘, μ μ§λ³΄μ λ° ν¨μ¨μ΄ μ¦κ° νκΈ° λλ¬Έμ.
- #include ν€λ νμΌμ κ²°κ΅, μ μΈλ¬Έλ§ κ°μ§κ³ μλ μΈν°νμ΄μ€μ μν μ. μ¦, ꡬν체λ κ²°κ΅ λ§ν¬ κ³Όμ μ ν΅ν΄ μ°κ²°μ΄ λ¨.
- λν, μμ κ°μ΄ extern ν€μλλ₯Ό main() ν¨μ λ΄λΆμμ μ¬μ© μ¦, ν¨μ λ΄λΆμμ μ¬μ©μ ν μ μμ.
- μμ extern int i; λ κ΅³μ΄ extern μ΄ μμ΄λ μ μλ³μλ‘ λ§λ€μ΄μ§ i λ₯Ό μμ μ μΈκ³Ό μ΄κΈ°νκ° λμ΄μκΈ°μ μ¬μ©μ΄ κ°λ₯ν¨.
- νμ§λ§, μλμ extern int k; λ extern μ΄ μλ κ²½μ° μ€λ₯κ° λ¨.
(5) λ μ§μ€ν° λ³μ
- μμ½μ΄ 'register' λ₯Ό μ§μ νμ¬ μ μΈ ν μ μμ.
- CPUμ λ μ§μ€ν°μ μλ£λ₯Ό μ μ₯ν κ²μ μμ²ν¨
- λ§€μ° μμ£Ό μ¬μ©λλ λ³μμ μ§μ νμ¬ μ€ν μλλ₯Ό λμ΄λ €λ λͺ©μ μΌλ‘ μ¬μ©μ΄ λ¨.
- μμλ‘λ λ°λ³΅λ¬Έμ μΉ΄μ΄ν° λ³μλ‘ μ¬μ© ν μ μμ.
- μ‘΄μκΈ°κ° λ° μ ν¨λ²μ, μ΄κΈ°κ°: μλλ³μμ λμΌν¨
'π οΈBackend > βοΈC' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CμΈμ΄] λ°°μ΄κ³Ό ν¬μΈν°(1) (0) | 2025.10.16 |
---|---|
[CμΈμ΄] ν¨μμ κΈ°μ΅ ν΄λμ€(1) (0) | 2025.10.15 |
[CμΈμ΄] μ ν μ μ΄λ¬Έκ³Ό λ°λ³΅ μ μ΄λ¬Έ (0) | 2025.10.13 |
[CμΈμ΄] μ μΆλ ₯ ν¨μμ μ°μ°μ(2) (0) | 2025.10.03 |
[CμΈμ΄] μ μΆλ ₯ ν¨μμ μ°μ°μ(1) (0) | 2025.09.05 |