혼공C 4주차

김기재·2023년 7월 30일
0

혼공C

목록 보기
4/4

선택미션: 다양한 함수의 유형

  • 매개변수가 없는 함수
    : 함수를 호출할 때 입력받을 인수는 없지만 반환하는 값은 존재
    : 호출하면 알아서 뭔가 값을 내놓는다거나 출력하는 경우 등
    : (void) or 단순하게 ().
int always_one()  ## 1 이라는 int 값을 내놓지만 딱히 입력해 줄 인수는 필요 없음.
{

return 1 ;

}
  • 반환값이 없는 함수
    : 함수 호출 시 입력받는 인수는 있는데 반환하는 값은 없음
    : 인수를 입력하면 단순히 출력하는 경우 등
    : 자료형에 void가 입력됨
    : 반환할 값이 없으므로 return; 으로 끝맺음
void print_what(int x, char y)  ## y 라는 문자를 x 번 출력해주는 함수
{                               ## x 와 y 를 인수로 입력함
int i;

for (i=0; i<x; i++)
{
printf("%c\n", y);
}

return;
}
  • 매개변수도 없고 반환값도 없는 함수
    : 진짜 단순 출력하는 경우 등.
void print_hello()  ## 굳이 헬로 함수를 불러서 헬로를 출력하다니!
{
printf("hello");
return;
}
  • 재귀호출 함수 (recursive function)
    : 주로 알고리즘 문제에서 등장하는 함수 개념으로 알고 있음.
    : 반복문을 사용해서 복잡하게 풀어나갈 필요 없이, 반복되는 원리를 깨우친다면 재귀호출 함수를 통해 간단히 풀어낼 수 있음.
    : 그러나! 반복적인 호출을 통한 메모리 남용으로 인해 스택오버플로우가 발생할 가능성이 있음.
int recursive_func(int x)  ## 정말 많이 알려진 재귀함수의 대표적인 예시
                           ## 수열의 합을 구하는 경우. 
                           ## 수열적 특성과 같이 그 흐름이 파악될 경우 재귀함수가
                           유용
{

if (x != 1)
{
return x + recursive_func(x - 1);
}

else return 1;

}

심화 미션: 왜 무한 출력하지 않고 꺼질까?

: 프로그래밍 언어 내에서 호출하는 함수는 일정 메모리를 잡아먹는다.

~ 혼공컴운에 의하면 이 또한 시스템 호출(system call)의 경우.
~ 호출에 의한 OS 서비스를 요청할 경우 해당 상태에 대한 정보가 그 횟수만큼 늘어날 것이고, 이는 프로세스의 상태를 기록하는 정보의 크기가 커져 메모리를 많이 사용하게 되는 것이 아닐까?

: 이렇게 호출이 지속되면 메모리도 그만큼 잡아먹히고, 결국 오버플로우가 발생하여 프로그램이 강제적으로 종료되는 것.


함수의 구분

  • 표준 라이브러리 함수
    : 프로그래밍 언어 및 헤더 파일에 이미 구현되어 있는 기본적인 함수들.
    : main 함수, printf , scanf 등등

  • 사용자 정의 함수
    : 사용자가 직접 정의하고 사용하는 사적 함수

    • 함수 선언
      : 컴파일러에게 '이러한 이름의 함수를 쓸 것이다' 라고 미리 알려주는 과정.
      : 선언의 경우, 매개변수의 변수명은 생략해도 OKAY. 자료형만 적어도 OKAY.
    • 함수 정의
      : 함수의 구체적인 기능을 명시.
      : 실제 코드로, 실제 기능을 구현
    • 함수 호출
      : 정의내린 함수를 main 함수 내에서 사용하는 것.
      : 값을 호출하는 경우도 있고~ (int, char func....), 없는 경우도 있고~ (void func)

* 함수를 사용할 때 유의사항 !!!!

: 함수를 호출하기 전, 먼저 위에 함수가 정의되어 있거나 선언되어 있어야 하며, 만약 선언만 했을 경우 반드시 그 후에 정의가 되어있어야 한다 !!

profile
精神一到何事不成

0개의 댓글