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) : μ „μ—­λ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜

//---------μ „μ—­λ³€μˆ˜μ˜ λ²”μœ„ μ‹œμž‘----------

#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)에 μ €μž₯λœλ‹€.

#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, ... ) κ³Ό 같이 μ“΄λ‹€.

#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 );
}