728x90

 


ν•¨μˆ˜λž€?

  • ν•¨μˆ˜λŠ” μ–΄λ–€ κΈ°λŠ₯을 ν•˜λ„λ‘ λ§Œλ“  μ½”λ“œ 묢음.
  • 처음 ν•œ 번만 μž‘μ„±ν•˜λ©΄ λ‚˜μ€‘μ— ν•„μš”ν•  λ•Œλ§ˆλ‹€ 계속 뢈러 μ‚¬μš©ν•  수 μžˆλ‹€.
  • ν•¨μˆ˜λŠ” μž…λ ₯을 λ°›μ•„μ„œ 좜λ ₯을 λ‚΄λ³΄λ‚΄λŠ” λ°•μŠ€λ‘œ 생각할 수 μžˆλ‹€.

// μ˜ˆμ‹œ
#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

'ν”„λ‘œκ·Έλž˜λ° > Cμ–Έμ–΄' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

포인터  (0) 2024.08.15
λ°°μ—΄  (0) 2024.08.14
반볡문  (0) 2024.07.31
쑰건문  (0) 2024.07.31
μ—°μ‚°μž  (0) 2024.07.31

+ Recent posts