C Programming Language/C

Cμ–Έμ–΄ μ „μ—­λ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜, λ§€κ°œλ³€μˆ˜(+κ°€λ³€λ§€κ°œλ³€μˆ˜)의 κ°œλ…

567Rabbit 2024. 6. 19. 11:46

https://codebunny99.tistory.com/122

 

CPU λ©”λͺ¨λ¦¬μ— λŒ€ν•΄ ν•™μŠ΅ν•˜κΈ°

(ν˜•μ‹) λ³€μˆ˜ = λ°μ΄ν„° =을 κΈ°μ€€μœΌλ‘œ μ™Όμͺ½μ€ λ³€μˆ˜, μ˜€λ₯Έμͺ½μ€ λ°μ΄ν„°λΌκ³  ν•œλ‹€. count = 3 μ½”λ“œ (Code) μ˜μ—­:ν”„λ‘œκ·Έλž¨μ˜ "μš”λ¦¬μ±…"이라고 생각할 수 μžˆλ‹€.μš”λ¦¬μ±…μ—λŠ” μš”λ¦¬ 방법(λͺ…λ Ήμ–΄)듀이 μ ν˜€

codebunny99.tistory.com

 

 

λ³€μˆ˜μ˜ 속성

 

- 이름, νƒ€μž…, 크기, κ°’ + λ²”μœ„, μƒμ‘΄μ‹œκ°„, μ—°κ²°

 

λ²”μœ„(scope) : λ³€μˆ˜κ°€ μ‚¬μš© κ°€λŠ₯ν•œ λ²”μœ„, κ°€μ‹œμ„±

생쑴 μ‹œκ°„(lifetime) : λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•˜λŠ” μ‹œκ°„

μ—°κ²°(linkage) : λ‹€λ₯Έ μ˜μ—­μ— μžˆλŠ” λ³€μˆ˜μ™€μ˜ μ—°κ²° μƒνƒœ

 

 

 

 

λ³€μˆ˜μ˜ λ²”μœ„(scope) : μ „μ—­λ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜

c, h
λ‹«κΈ°
//---------μ „μ—­λ³€μˆ˜μ˜ λ²”μœ„ μ‹œμž‘---------- #include<stdio.h> ​​​​​​​​​​​​​​​ int A; //μ „μ—­λ³€μˆ˜. μ΄ˆκΈ°κ°’μ€ 0 int B; //μ „μ—­λ³€μˆ˜. μ΄ˆκΈ°κ°’μ€ 0 int add() { ​​​​return A + B; } int main() { ​​​​int answer; //μ§€μ—­λ³€μˆ˜ ​​​​ ​​​​//---------μ§€μ—­λ³€μˆ˜μ˜ λ²”μœ„ μ‹œμž‘---------- ​​​​ ​​​​A = 5; ​​​​B = 7; ​​​​ ​​​​answer = add(); ​​​​printf("%d + %d = %d\n", A, B, answer); ​​​​ ​​​​//---------μ§€μ—­λ³€μˆ˜μ˜ λ²”μœ„ 끝---------- ​​​​//---------μ „μ—­λ³€μˆ˜μ˜ λ²”μœ„ 끝---------- ​​​​ ​​​​return 0; }

 

 

μ „μ—­ λ³€μˆ˜ Global Variables

- μ „μ—­ λ³€μˆ˜λŠ” ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λ‘œ, ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“  ν•¨μˆ˜μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€

- μ „μ—­ λ³€μˆ˜μ˜ λ²”μœ„λŠ” μ†ŒμŠ€νŒŒμΌ 전체이닀.

- μ „μ—­ λ³€μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ 전체 수λͺ… λ™μ•ˆ μ‘΄μž¬ν•˜λ©°, νŠΉμ • λ©”λͺ¨λ¦¬ μ˜μ—­μ— μ €μž₯λœλ‹€

- λ³€μˆ˜λŠ” λ””ν΄νŠΈλ‘œ 0으둜 μ΄ˆκΈ°ν™”λ˜μ–΄μžˆμ§€λ§Œ, 기본적으둜 μ΄ˆκΈ°ν™” μ‹œν‚€λŠ” 것이 μ’‹λ‹€.

 

 

μ§€μ—­ λ³€μˆ˜ Local Variables

- μ§€μ—­ λ³€μˆ˜λŠ” ν•¨μˆ˜λ‚˜ 블둝 λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λ‘œ, μ„ μ–Έλœ ν•¨μˆ˜λ‚˜ λΈ”λ‘μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.

- μ§€μ—­ λ³€μˆ˜λŠ” ν•΄λ‹Ή 블둝이 싀행될 λ•Œ μƒμ„±λ˜κ³ , 블둝이 μ’…λ£Œλ˜λ©΄ μ†Œλ©Έλœλ‹€.

- C μ–Έμ–΄μ—μ„œ μ§€μ—­ λ³€μˆ˜λŠ” 기본적으둜 연결이 μ—†λ‹€. 즉, λ‹€λ₯Έ νŒŒμΌμ΄λ‚˜ λ‹€λ₯Έ λΈ”λ‘μ—μ„œ μ ‘κ·Όν•  수 μ—†λŠ” κ³ μœ ν•œ λ³€μˆ˜μ΄λ‹€.

- λ³€μˆ˜λ₯Ό 0으둜 μ΄ˆκΈ°ν™”ν•˜μ—¬μ•Ό ν•œλ‹€.

 

 

 

μ§€μ—­ λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 이유

 

- μ§€μ—­ λ³€μˆ˜λŠ” μ„ μ–Έλœ ν•¨μˆ˜λ‚˜ 블둝이 싀행될 λ•Œ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœλ‹€. 이 λ•Œ, μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ μ§€μ—­ λ³€μˆ˜λŠ” 이전에 μ‚¬μš©ν•œ λ©”λͺ¨λ¦¬μ˜ κ°’(μ“°λ ˆκΈ° κ°’)을 κ°€μ§€κ³  μžˆμ„ 수 μžˆλ‹€. 이 값을 μ‚¬μš©ν•˜λ©΄ μ˜ˆμƒμΉ˜ λͺ»ν•œ κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  수 μžˆλ‹€.

- μ΄ˆκΈ°ν™”λœ μ§€μ—­ λ³€μˆ˜λŠ” 예츑 κ°€λŠ₯ν•œ 값을 κ°€μ§€κ³  μžˆλ‹€. μ΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ λ™μž‘μ„ μ˜ˆμΈ‘ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄μ£Όλ©°, 버그λ₯Ό μ°Ύκ³  μˆ˜μ •ν•˜λŠ” 데 도움이 λœλ‹€.

 

 

 

 

# λ§€κ°œλ³€μˆ˜λ„ μΌμ’…μ˜ μ§€μ—­λ³€μˆ˜μ΄λ‹€.

 

- λ§€κ°œλ³€μˆ˜μ™€ μ§€μ—­ λ³€μˆ˜ λͺ¨λ‘ μŠ€νƒ λ©”λͺ¨λ¦¬(stack memory)에 μ €μž₯λœλ‹€.

c, h
λ‹«κΈ°
#include <stdio.h> int inc(int counter); int main(void) { ​​​​int i; ​​​​ ​​​​i = 10; ​​​​return 0; } void inc(int counter){ //λ§€κ°œλ³€μˆ˜λ„ μΌμ’…μ˜ μ§€μ—­λ³€μˆ˜ β€Œcounter++; }

 

 

λ§€κ°œλ³€μˆ˜μ˜ νŠΉμ§•

 

- ν•¨μˆ˜ 호좜 μ‹œ λ§€κ°œλ³€μˆ˜κ°€ μŠ€νƒ ν”„λ ˆμž„μ— ν• λ‹Ήλ˜κ³ , ν•¨μˆ˜ μ’…λ£Œ μ‹œ ν•΄λ‹Ή ν”„λ ˆμž„μ΄ μ œκ±°λ˜λ©΄μ„œ λ³€μˆ˜λ„ μ œκ±°λœλ‹€.

- λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜ 호좜 μ‹œ μ „λ‹¬λœ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€. ν˜ΈμΆœμžκ°€ μ „λ‹¬ν•œ 값이 λ§€κ°œλ³€μˆ˜μ˜ μ΄ˆκΈ°κ°’μ΄ λœλ‹€.

- κ·ΈλŸ¬λ―€λ‘œ ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ” 방법이 μ œν•œλœλ‹€. μΌλ°˜μ μœΌλ‘œλŠ” ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©λœλ‹€.

 

 

 

 

κ°€λ³€ 맀개 λ³€μˆ˜

 

- λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜κ°€ κ°€λ³€μ μœΌλ‘œ λ³€ν•  수 μžˆλŠ” κΈ°λŠ₯

- int sum ( int num, ... ) κ³Ό 같이 μ“΄λ‹€.

c, h
λ‹«κΈ°
#include <stdio.h> #include <stdarg.h> // κ°€λ³€ λ³€μˆ˜λ₯Ό μ²˜λ¦¬ν•  수 있게 μž„ν¬νŠΈ int sum (int, ...); int main(void) { β€Œint answer = sum(4, 4, 3, 2, 1); // λ³€μˆ˜ 개수 상관 x ​​​​printf("합은 %dμž…λ‹ˆλ‹€\n", answer); ​​​​return(0); } int sum( int num, ... ) // κ°€λ³€ λ³€μˆ˜ 처리 ν•¨μˆ˜ { ​​​​int answer = 0; ​​​​va_list argptr; ​​​​va_start(argptr, num); ​​​​for ( ; num > 0 ; num-- ) β€Œβ€‹β€‹β€‹β€‹answer += va_arg( argptr, int ); ​​​​va_end( argptr ); ​​​​ ​​​​return( answer ); }