C언어 공부/개념 공부

2024.01.08 C언어 <함수 (2)>

코딩입문시작 2024. 1. 12. 13:20

7.2 여러 가지 함수 유형

 

학습목표

  • 처리할 데이터를 스스로 입력하는 함수에는 매개변수가 없어도 된다.
  • 전달받은 데이터를 화면에 출력하는 함수는 반환형을 쓰지 않아도 된다.
  • 같은 내용을 단지 화면에 출력하는 함수는 둘 다 쓰지 않아도 된다.
  • 재귀호출 함수는 자기 자신을 다시 호출한다.
형태 구분 설명
매개변수 X 선언 int get_pos(    );
특징 호출할 때 인수 없이 괄호만 사용
반환형 X 선언 void print_char(char ch, int cnt);
특징 반환할 때 return 사용X or return문만 사용
호출문장을 수식의 일부로 사용 X
매개변수 X, 반환형 X 선언 void print_title(   );
특징 두가지 경우의 특징을 모두 포함

 

그 밖에 재귀호출 함수라는 것도 있다.

 

형태 구분 설명
재귀호출 함수 선언 void rec_func(  ) { ... rec_func (    ); ... }
특징 함수 안에 재귀호출을 멈추는 조건 O

 

 

7.2.1 매개변수가 없는 함수

 

예시를 들어, 키보드로 양수를 입력하여 반환하는 함수를 만든다면 호출 함수로부터 값을 받을 필요가 없으므로 매개변수도 필요가 없다. 

내가 만들어준 함수에 매개변수가 없다면,  괄호만 사용하는 것도 가능하지만 void를 넣어 매개변수가 없음을 명시적으로 표현하는 것이 좋다. 

 

※ 함수를 호출할 때는 인수가 없어도 반드시 괄호를 사용해야 한다!

 

 

7.2.2 반환값이 없는 함수 

 

※ 데이터를 받아서 단지 화면에 출력하는 함수라면 특별히 반환값이 필요없다.

ex) 문자와 숫자를 인수로 주고 호출하면 문자를 숫자만큼 화면에 출력하는 함수

 

반환값이 없는 함수는 선언과 정의의 반환형에 void를 사용한다.

 

 

반환값이 없는 함수는 return문을 생략할 수 있다. 그 이유는, return문이 없어도 함수의 코드를 모두 수행하면 호출한 곳으로 자동으로 돌아간다.

반환형이 void인 함수는 컴파일러가 반환값이 없다고 가정하여 호출한 위치에 반환값을 저장할 공간을 준비하지 않는다. 따라서 값을 반환해도 저장할 공간이 없으므로 return문에 값을 사용하면 컴파일러는 경고 메시지로 알려준다. 이와 같은 이유로, 반환값이 없는 함수는 호출문장을 수식의 일부로 쓸 수 없다.

ex) print_char('@', 5) + 10 

 

여기서 Keypoint, 반환값이 없다는 것은 Just 출력 하는 것 뿐이지 값이 아니다.
그래서 수식의 일부로 쓸 수 없다. 왜? 값이 아니니까.

7.2.3 반환값과 매개변수가 모두 없는 함수

 

ex) 일정한 문자열을 여러 번 출력하는 경우 함수로 만들고 필요할 때 호출할 수 있다.

 

함수의 매개변수와 반환형에 모두 void를 사용한다.

 

특징으로는, 함수의 정의에 return문이 없고 호출할 때 값을 주지 않으며 호출 문장을 수식의 일부로 사용할 수 없다.

값을 넣어주거나, 반환되는 값이 없고 그저 " 자주 출력되는 문장을 함수로 바꿔준 느낌 "으로 보면 될 것 같다. 

 

7.2.4 재귀호출 함수 

 

함수 안에서 자신을 호출하면 재귀호출 함수가 된다.

 

Google에서 재귀호출 함수 검색
출처 : Google

필자도 재귀호출 함수를 공부할 때 무엇인지 느낌은 오지만, 코드를 짤 때에 너무 어렵고 헷갈렸다. 이 부분은 예시를 보면서 공부하는 것이 좋은 것 같다. (팩토리얼 예제) 

 

필자는 알고리즘 공부할 때에 여기서 참고를 많이 했다.

출처 : 알고리즘 기초 - 재귀 호출(Recursive Call) (velog.io)

 

알고리즘 기초 - 재귀 호출(Recursive Call)

🌈 재귀 호출(Recursive Call) > ### 🔥 재귀 호출이란? > ### 🔥 재귀 호출 예시 > ### 🔥 > ### 🔥 1. 재귀 호출이란? >#### 1) 재귀 함수 개념 재귀 함수란 자기 자신을 다시 호출하는 함수를 의미함 재귀

velog.io

 

함수가 모든 명령을 수행하면 자동으로 반환하는데 반환 전에 자신을 호출하므로 처음부터 다시 실행한다.

즉, 이렇게 계속 호출하면 함수는 끝나지 않고 apple을 계속 출력한다.

 

실행 결과는 상당히 많은 apple을 출력하고 중간에 종료된다. 함수는 호출만으로도 일정 크기의 메모리를 사용하므로 무한 호출하게 되면 하나의 프로그램이 쓸 수 있는 메모리 (해당 프로세스에 할당된 스택 메모리) 를 모두 사용하여 강제 종료된다.  " 재귀호출 함수는 반복 고리를 끊을 수 있는 조건식을 반드시 포함해야 한다." 

 

 

 

★ (헷갈릴 만한) 재귀호출이 반복문과 다른 점은 무엇인가?

 

재귀호출 함수는 최초 호출한 곳이 아니라 이 전에 호출했던 곳으로 돌아간다.

(재귀호출 함수내의 조건문 (if문)을 만나면, 조건이 참이 됐을 때 이전 함수의 호출 위치로 반환한다.)

 

 

'C언어 공부 > 개념 공부' 카테고리의 다른 글

2024.01. C언어 <배열 (2)>  (0) 2024.01.13
2024.01. <배열 (1)>  (0) 2024.01.12
2024.01.08 함수 응용  (0) 2024.01.12
2024.01.08 C언어 학원 필기 요약본 <함수 (3)>  (0) 2024.01.12
2024.01.08 C언어 <함수 (1)>  (1) 2024.01.11