ํจ์๋?
- ํจ์๋ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋๋ก ๋ง๋ ์ฝ๋ ๋ฌถ์.
- ์ฒ์ ํ ๋ฒ๋ง ์์ฑํ๋ฉด ๋์ค์ ํ์ํ ๋๋ง๋ค ๊ณ์ ๋ถ๋ฌ ์ฌ์ฉํ ์ ์๋ค.
- ํจ์๋ ์ ๋ ฅ์ ๋ฐ์์ ์ถ๋ ฅ์ ๋ด๋ณด๋ด๋ ๋ฐ์ค๋ก ์๊ฐํ ์ ์๋ค.
// ์์
#include <stdio.h>
int sum(int a, int b); // sum ํจ์ ์ ์ธ
int main(void){
int x=3, y=4;
int result;
result = sum(x, y) // sum ํจ์ ํธ์ถ
printf("result๋ %d์
๋๋ค.\n", result);
return 0;
}
int sum(int a, int b){ // sum ํจ์ ์ ์
int hap;
hap = a+b;
return hap;
}
ํจ์์ 3๊ฐ์ง ์ํ
1. ํจ์ ์ ์
- ํจ์ ์ ์ = ํจ์๋ฅผ ๋ง๋๋ ๊ฒ
- ๋ฐํํ: ํจ์๊ฐ ์ํ๋ ํ์ ๊ฒฐ๊ณผ
- ํจ์์ด๋ฆ: ํจ์์ ๊ธฐ๋ฅ์ ๋ง๋ ์ด๋ฆ
- ๋งค๊ฐ๋ณ์: ํจ์๊ฐ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ
๋ฐํํ ํจ์์ด๋ฆ(๋งค๊ฐ๋ณ์)
{
ํจ์ ๋ด์ฉ
}
int sum(int a, int b){
int hap;
hap = a + b;
return hap;
}
! return์ ํจ์์ ์คํ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ฃผ๋ ์ ์ด๋ฌธ
- ๋ฐํํ: sum ํจ์๋ ๋ ์ ์์ ํฉ์ ๋ฐํํ๋ฏ๋ก int๋ฅผ ์ฌ์ฉ
- ํจ์์ด๋ฆ: ๋ ์ ์๋ฅผ ๋ํ๋ ํจ์์ด๋ sum์ผ๋ก ํจ์๋ช ์ง์
- ๋งค๊ฐ๋ณ์: sum ํจ์๋ ๋ ์ ์๋ฅผ ๋ํ๋ ํจ์์ด๋ฏ๋ก intํ ๋ณ์๋ฅผ 2๊ฐ ์ ์ธ
2. ํจ์ ์ ์ธ
- ํจ์ ์ ์ธ = ์ปดํ์ผ๋ฌ๊ฐ ์๋ก ๋ง๋ ํจ์๋ฅผ ์ธ์ํ ์ ์๋๋ก ํจ์์ ํํ๋ฅผ ์๋ฆฌ๋ ์ญํ
- C์ธ์ด์์๋ ๊ฐ์ฅ ๋จผ์ main() ํจ์๊ฐ ์ปดํ์ผ๋ฌ์ ์ํด ์ปดํ์ผ๋๊ธฐ ๋๋ฌธ์ main() ํจ์ ๋ค์ ๋ฑ์ฅํ๋ ํจ์๋ ์ปดํ์ผ๋ฌ๊ฐ ์์ง ๋ชปํด ์ค๋ฅ๊ฐ ๋ฐ์
- ๋ฐ๋ผ์ ์ปดํ์ผ๋ฌ์๊ฒ ํจ์๊ฐ ์ ์๋์ด ์๋ค๊ณ mainํจ์ ์์ ์๋ ค์ผ ํ๋ค! โถ ํจ์์ ์ธ
- ํ์ํ ํจ์๋ฅผ main ํจ์ ๋ฐ์ ์ฐจ๋ก๋ก ์ ์ํ๊ณ , main ํจ์ ์์๋ ๋ชจ๋ ํจ์๋ฅผ ์ ์ธํ์ฌ ์์ฑ
๋ฐํํ ํจ์์ด๋ฆ(๋งค๊ฐ๋ณ์);
int sum(int a, int b);
3. ํจ์ ํธ์ถ
- ํจ์ ํธ์ถ = ๋ง๋ ํจ์๋ฅผ ์ฌ์ฉ
- ํจ์์ ์ด๋ฆ์ ์ ์ ํ ๊ดํธ๋ฅผ ์ด๊ณ ๋งค๊ฐ๋ณ์๋ค์ ๋ฃ์ ํ ๊ดํธ๋ฅผ ๋ซ๋ ๊ฒ์ผ๋ก ํจ์๋ฅผ ํธ์ถ
- ๋ฐํํ๋ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ =(๋์ ์ฐ์ฐ์)๋ฅผ ํตํด ๋์ ๋ฐ์ ์ ์๋ค.
๋ฐํ๋ฐ์ ๋ณ์ = ํจ์์ด๋ฆ(๋งค๊ฐ๋ณ์);
result = sum(x, y);
์ฌ๋ฌ ๊ฐ์ง ํจ์ ์ ํ
1. ๋งค๊ฐ๋ณ์์ ๋ฐํ๊ฐ์ด ๋ชจ๋ ์๋ ๊ฒฝ์ฐ
- ๋งค๊ฐ๋ณ์์ ๋ฐํ๊ฐ์ด ๋ชจ๋ ์๋ ๊ฒฝ์ฐ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํํ์ ํจ์
int Add(int num1, int num2) //๋งค๊ฐ๋ณ์๋ intํ ์ ์ ๋์ด๋ฉฐ, ์ด ๋์ ์ด์ฉํ ๋ง์
์ ์งํ
{
int result = num1 + num2;
return result; // return์ ์ํด result์ ๊ฐ์ด ๋ฐํ
}
2. ๋ฐํ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
- ๋ฐํ๊ฐ์ด ์๋ค๊ณ ํด์ ๊ฐ์ ์ถ๋ ฅํ ์ ์๋ ๊ฒ์ ์๋๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๋ฐํํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ int๋ฅผ ์ฐ์ง ์๊ณ , void๋ผ๋ ๋ฐํํ์ ์ฌ์ฉํ๋ค.
void ShowAddResult(int num) // ์ฌ๊ธฐ์ ์ฌ์ฉํ void๋ ๋ฐํํ์ง ์๋๋ค๋ ๋ป
{
printf("๋ง์
๊ฒฐ๊ณผ ์ถ๋ ฅ : %d\n", num);
// return๋ฌธ์ด ์๋ค.
}
3. ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ
- ํจ์๋ฅผ ํธ์ถํ ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ์ง ์๋๋ค.
int InputNum(void) // ์ฌ๊ธฐ์ ์ฌ์ฉํ void๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ์ง ์๋๋ค๋ ๋ป
{
int num;
scanf("%d", &num);
return num;
}
4. ๋งค๊ฐ๋ณ์์ ๋ฐํ๊ฐ์ด ๋ชจ๋ ์๋ ๊ฒฝ์ฐ
- ๋ ๋ค ์๋ ๊ฒฝ์ฐ๋ ์ฌ์ฉ๋ฐฉ๋ฒ์ ์๊ฐํ๋ ํจ์
- ์ด ํจ์๋ ๋จ์ํ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ํจ์์ด๊ธฐ ๋๋ฌธ์ ๋งค๊ฐ๋ณ์์ ์ ๋ฌ๋, ๋ฐํ๊ฐ๋ ๋ถํ์
- ๋ฐ๋ผ์, ๋งค๊ฐ๋ณ์์ ๋ฐํํ ๋๋ค void๋ก ์ ์ธ
void HowToUse(void)
{
printf("๋๊ฐ์ ์ ์๋ฅผ ์
๋ ฅํ๋ฉด ๋ง์
๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.\n");
printf("์ ์๋ฅผ ์
๋ ฅ ํ์ธ์.\n")
}
๋ณ์์ ์กด์ฌ๊ธฐ๊ฐ๊ณผ ์ ๊ทผ๋ฒ์
1. ์ง์ญ๋ณ์
- ์ง์ญ๋ณ์ = ํ์ ๋ ์ง์ญ์์๋ง ์ฌ์ฉ๋๋ ๋ณ์
- ์ค๊ดํธ {} ์์ ์ ์ธ๋๋ ๋ณ์๋ ์ง์ญ๋ณ์
- ๊ทธ๋์ ํจ์๊ฐ ์ค๊ดํธ๋ฅผ ๋ฒ์ด๋๋ฉด ์ฌ๋ผ์ง๋ค.
#include <stdio.h>
int main(void)
{
{
int num = 3;
}
printf("%d\n", num);
return 0;
}
์ปดํ์ผ ์๋ฌ ๋ฐ์
โถ ๋ณ์ num์ ์ค๊ดํธ๋ก ๋ฌถ์ ๋ธ๋ก ์์ ์ ์ธ๋์ด ๋ธ๋ก ๋ฐ์์ num์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ๋ณ์๋ฅผ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์.
#include <stdio.h>
int main(void)
{
int num = 3;
{
printf("%d\n", num);
}
return 0;
}
โถ ๋ณ์ num์ main ํจ์ ๋ธ๋ก์ ์ ์ธ๋์ด ์๊ณ , printf๊ฐ ์๋ ๋ธ๋ก๋ main ํจ์ ๋ธ๋ก ์์ ์๊ธฐ ๋๋ฌธ์ num์ด main ํจ์ ๋ธ๋ก ์์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋๋ฏ๋ก ๋ฌธ์ ๊ฐ ์๋ค.
2. ์ ์ญ๋ณ์
- ์ ์ญ๋ณ์ = ์ด๋ค ๋ณ์ ์์ญ ๋ด์์๋ ์ ๊ทผํ ์ ์๋ ๋ณ์
- ์ง์ญ ๋ณ์์ ๋ฌ๋ฆฌ ์ค๊ดํธ ๋ด์ ์ ์ธ๋์ง ์๋๋ค.
- ์ ์ญ๋ณ์์ ์ ์ธ์ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ์ ํ.
- ์ ์ญ๋ณ์์ ์ง์ญ๋ณ์์ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ํ๋ ๊ฒ์ด ์ข๋ค.
#include <stdio.h>
int num = 3;
int main(void)
{
printf("%d\n", num);
return 0;
}
โถ num์ main ํจ์ ๋ฐ๊นฅ์ ์ ์ธ๋์ด ์ด๋์์๋ ์ ๊ทผ ๊ฐ๋ฅ
main ํจ์์์ ํธ์ถํ ๋ค์์, num ๊ฐ์ ์ถ๋ ฅํ๋๋ฐ ์ด๋ num ๊ฐ์ ์ ์ญ ๋ณ์ num ๊ฐ์ด๋ค.
3. static ๋ณ์
- void ์ง์ญ๋ณ์๋ฅผ ์ ์ธํ ๋ static ์ ์ธ์ ์ถ๊ฐํ๋ฉด static ๋ณ์(์ ์ ์ง์ฐ ๋ณ์)๊ฐ ๋๋ค.
- static ๋ณ์๋ ์ฝ๋ ๋ธ๋ก ์์ ์ ์ธํ๋ฏ๋ก ์ผ๋ฐ ์ง์ญ๋ณ์์ ๊ฐ์ด ์ฌ์ฉ ๋ฒ์๊ฐ ๋ธ๋ก ์์ผ๋ก ์ ํ๋๋ค.
- ํ์ง๋ง ์ผ๋ฐ ์ง์ญ๋ณ์์ static ๋ณ์๋ ์ ์ฅ ๊ณต๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ ๊ธฐ๊ฐ์ด ๋ค๋ฅด๋ค.
static ์๋ฃํ ๋ณ์์ด๋ฆ;
#include <stdio.h>
void plusplus(void); // plusplus ํจ์ ์ ์ธ
int main(void)
{
int i;
for (i=0; i<5; i++)
plusplus();
return 0;
}
void plusplus(void)
{
int num1 = 0; // ์ผ๋ฐ ์ง์ญ๋ณ์๋ก ์ ์ธ
static int num2 = 0; // static ๋ณ์๋ก ์ ์ธ
num1++;
num2++;
printf("local : %d, static : %d\n", num1, num2);
}
// ์คํ๊ฒฐ๊ณผ
local : 1, static : 1
local : 1, static : 2
local : 1, static : 3
local : 1, static : 4
local : 1, static : 5
- ์ผ๋ฐ ์ง์ญ๋ณ์:
- ํจ์๊ฐ ํธ์ถ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๊ณ ๋ฐํ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋๋ค.
- ๊ทธ๋์ ์ผ๋ฐ ์ง์ญ๋ณ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์๋กญ๊ฒ ํ ๋น๋๊ณ ๊ทธ๋๋ง๋ค 1๋ก ์ด๊ธฐํ.
- static ๋ณ์:
- ์ ์ฅ ๊ณต๊ฐ์ด ํ ๋น๋์ด ์ ์งํ๋ ์์ ์ด ํจ์ ํธ์ถ๊ณผ ๋ฌด๊ด.
- static ๋ณ์๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ฉฐ ํ๋ก๊ทธ๋จ์ด ๋๋ ๋๊น์ง ์กด์ฌํ๋ค.
- ๊ทธ๋์ ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐํ๋ฏ๋ก 1๋ถํฐ 5๊น์ง ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ค.
4. register ๋ณ์
- ์ง์ญ๋ณ์์ register ๋ผ๋ ์ ์ธ์ ์ถ๊ฐํ๋ฉด ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ ๋์ CPU์ ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ ์ง์คํฐ๋ CPU ์์ ์์ด ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๊ฐ ๊ฐ์ฅ ๋น ๋ฅธ ๊ณต๊ฐ์ด๋ฏ๋ก ์ผ๋ฐ ๋ณ์๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๋ค.
register ์๋ฃํ ๋ณ์์ด๋ฆ;
โถ register ์ ์ธ์ ์ถ๊ฐํด๋ ์ปดํ์ผ๋ฌ๊ฐ ํฉ๋นํ์ง ์๋ค๊ณ ํ๋จํ๋ฉด ๋ ์ง์คํฐ์ ํ ๋น๋์ง ์๋๋ค.
๋ฐ๋๋ก register ์ ์ธ์ ํ์ง ์์๋ ์ปดํ์ผ๋ฌ๊ฐ ๋ ์ง์คํฐ์ ํ ๋นํด์ผ๊ฒ ๋ค๊ณ ํ๋จํ๋ฉด ๋ ์ง์คํฐ์ ํ ๋น๋๋ค.
์ง๊ธ์ ๊ฑฐ์ ์ด์ฉ๋์ง ์๋ ์ง์ ์
์ฌ๊ทํจ์
- ์ฌ๊ทํจ์ = ํจ์ ๋ด์์ ์๊ธฐ ์์ ์ ๋ค์ ํธ์ถํ๋ ํจ์
- ์ฌ๊ทํจ์๋ฅผ ์์ฑํ ๋๋ ๋ฐ๋์ ์ด ํจ์์ ํธ์ถ์ด ๋๋ ์ ์๋ ์ง์ ์ ๋ง๋ จํด ์ฃผ์ด์ผ ํ๋ค.
- ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌดํ๋ฃจํ์ ๋น ์ง๊ณ runtime error๊ฐ ๋ฐ์ํ๋ค.
#include <stdio.h>
int factorial(int n)
{
if(n==0)
return 1;
return n * factorial(n-1);
}
int main(void)
{
printf("3! = %d\n", factorial(3));
return 0;
}
//์คํ๊ฒฐ๊ณผ
3! = 6
- ๋งค๊ฐ๋ณ์์ ๋ฐํ๊ฐ์ ์์ฐ์์ด๊ธฐ ๋๋ฌธ์ intํ์ผ๋ก ์ง์
- factorial ํจ์์์๋ n๋ถํฐ ์ญ์์ผ๋ก 1์ฉ ๊ฐ์ํ๋ฉด์ ์ฌ๊ทํธ์ถ์ ํ๋ค.
- if ๋ฌธ์ ํ์ถ์กฐ๊ฑด์ผ๋ก n์ด 0์ด ๋์์ ๋ ํจ์๊ฐ ์ข ๋ฃ๋๋๋ก ์ ์๋์ด ์๋ค.
โถ factorial ํจ์๋ ๊ณ์ฐ ๊ฒฐ๊ณผ๊ฐ ์ฆ์ ๊ตฌํด์ง๋ ๊ฒ์ด ์๋๋ผ ์ฌ๊ทํธ์ถ๋ก n -1์ ๊ณ์ ์ ๋ฌํ๋ค๊ฐ n์ด 0์ผ ๋ ๋น๋ก์ 1์ ๋ฐํํ๋ฉด์ n๊ณผ ๊ณฑํ๊ณ ๋ค์ ๊ฒฐ๊ด๊ฐ์ ๋ฐํํ๋ค.
๊ทธ ๋ค n๊ณผ ๋ฐํ๋ ๊ฒฐ๊ณผ๊ฐ์ ๊ณฑํ์ฌ ๋ค์ ๋ฐํํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์ถ์ฒ: https://sejong-kr.libguides.com/c.php?g=942233&p=6822325