본문 바로가기
  • 부자가 될 남자
프로그래밍/C

[C언어] 함수의 선언과 정의

by ㅍ우주 2023. 5. 15.

함수란

쉽게 말해, 두 변수 x,y에 대하여 변수 x에 따라 y의 값이 지정될 때, 우리는 이를 함수라고 한다.


함수의 정의 형태

반환형 함수이름(전달값) {
    
 }

함수의 종류

* 반환 값에 대해 잘 알지 못한다면 다음을 참고하길 바란다.

2023.05.15 - [프로그래밍/C] - [C언어] 반환값 return에 대하여

 

- 반환값이 존재하는 함수

    • 함수의 정의 과정에서 함수의 반환형을 int로 정의한다.

 

- 반환값이 존재하지 않는 함수

    • 함수의 정의 과정에서 함수의 반환형을 void로 정의한다.

          **.void의 사전적 의미는 '빈', '~이 하나도 없는' 이기에, void는 반환값이 없는 상태라고 생각하고 넘어가면 될 것이다.

 

* 파라미터가 없는, 있는 함수는 굳이 종류를 나눌 필요가 없다는 판단하에 작성하진 않겠다.

   파라미터가 있다는 것은 함수를 호출할 때 작성하는 값이 있다는 것으로 받아들이면 될 것이다.


함수의 선언

함수의 선언이란, 함수를 사용하기에 앞서, "나 이 함수 어떻게 사용할거야!" 라고 알려주는 역할을 하는 것이다.


함수의 선언 형태

반환형식 함수이름(매개 변수 목록);

함수 선언의 역할

함수를 선언하면, 지정된 함수의 존재를 컴파일러에게 알려준다. 그러나 함수의 선언이 필연적인 과정인 것은 아니다.

함수를 호출하기 이전에 함수가 정의가 되어있다면, 함수의 선언은 굳이 해줄 필요가 없다.

그러나, 함수 호출 이전에 함수가 정의가 되어있지 않다면, 함수의 선언이 '꼭' 필요하다. 

함수 호출 이후에 함수가 정의되어있는데 함수의 선언 함수 호출 이전에 없는 경우, 컴퓨터는 함수가 정의되지 않았는데 함수를 호출한 것으로 받아들이고 함수를 호출해내지 못한다. 즉, 오류가 발생한다.

 

아래는 함수 선언의 필연성에 관한 예시이다.

#include <stdio.h>
// 선언 
void p(int num); // 나 p라는 함수를 사용할거야.

int main(void) {
    p(3); 
}
 // 함수 정의
 void p(int num){
    printf("num은 %d입니다.", num);
 }

함수 호출 이전에 함수가 정의 되어있지 않기에, 함수 선언 -> 오류 발생 X


 

#include <stdio.h>
int main(void) {
    p(3); 
}
 // 함수 정의
 void p(int num){
    printf("num은 %d입니다.", num);
 }

선언되지 않은 함수 p를 호출하였다고 에러가 발생하고 있는 모습이다.