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