본문 바로가기
c언어

c언어 함수 원형 이용해 보기

by 개발자 L 2022. 12. 4.
반응형

c언어 함수 원형 이용해 보기

네 안녕하세요, 이번 포스팅에서는 함수의 원형을 이용하는 방법에 대하여 알아보도록 하겠습니다.

함수의 원형은 컴파일러를 원칙적으로 사용할 수 없는 경우에 사용을 하게 되는데요,

그게 무엇이며, 함수 원형은 어떻게 생겼고, 그것을 어떤 방법으로 이용을 하면 되는지 한 번 자세히 알아보도록 하겠습니다.

 

1. 함수 원형

함수의 원형은 함수의 이름, 매개 변수로 반환형을 미리 함수가 정의되기 전에 선언을 하는 것을 말하며,

사용자 정의 함수와 차이가 있다면 함수의 몸을 가지고 있지 않으며, 함수명 끝에 세미콜론(;)이 붙어있다는 것입니다.

그리고 매개 변수의 이름은 생략을 해도 무관합니다.

 

1 - 1. 함수 원형을 사용을 해야 하는 경우

함수의 원형을 사용을 해야 하는 경우는 어떤 경우일까요?

제가 한 가지 예시를 들어보도록 하겠습니다.

#include <stdio.h>

int main()
{
    printf("섭씨 %lf도는 화씨 %lf도 입니다.\n", 36.0, cel_to_far(36.0));
    
    return 0;
}

double cel_to_far(double cel_t)
{
    return 9.0 / 5.0 * cel_t + 32;
}

이렇게 했을 때의 실행 결과입니다.

tempCodeRunnerFile.c: At top level:
tempCodeRunnerFile.c:10:8: error: conflicting types for 'cel_to_far'
 double cel_to_far(double cel_t)
        ^~~~~~~~~~
tempCodeRunnerFile.c:5:65: note: previous implicit declaration of 'cel_to_far' was here
반응형

 

이런 식으로 나옵니다.

이건 cel_to_far()이라는 함수가 정의가 되어있지 않기 때문에 c언어의 반환형 기본 설정인 int형으로 반환을 하려고 했으나,

나중에 코드를 컴파일했을 때의 반환형이 double형이라서 반환형이 달라 오류가 발생을 한 것입니다.

이 경우는 사실 일반적인 경우가 아닙니다.

원칙적으로는 컴파일러에게 함수에 대한 정보를 알리는 것이 기본 원칙인데,

그것을 벗어난 경우에 해당이 됩니다.

그런데 이러한 경우가 실제로 많이 발생을 합니다.

위의 예시만 들어도 바로 알 수가 있죠.

그래서 미리 컴파일러에게 함수의 정보를 알리지 못하는 상황일 때 함수 원형을 써서 알려주는 겁니다.

이렇게 말이죠.

#include <stdio.h>

double cel_far(double cel_t);

int main()
{
    printf("섭씨 %lf도는 화씨 %lf도 입니다.\n", 36.0, cel_to_far(36.0));
    
    return 0;
}

double cel_to_far(double cel_t)
{
    return 9.0 / 5.0 * cel_t + 32;
}

위에 보이는 전처리기 바로 밑에 선언을 해주었죠?

이렇게 알리게 되면 컴파일러에게 미리 함수의 정보를 일러주게 되어 오류가 나지 않습니다.

그럼 결과를 보도록 하겠습니다.

섭씨 36.000000도는 화씨 96.800000도 입니다.

이렇게 오류가 나지 않는 것을 볼 수가 있습니다.

 

2. 함수 원형을 사용하지 않는 방법

함수 원형을 사용하지 않는 방법은 사실 간단합니다.

컴파일러가 미리 함수에 대한 정보를 수집을 할 수 있다면 굳이 사용을 하지 않아도 됩니다.

하지만 실제로 개발을 하기 위해서 코드를 쓰다 보면 그게 쉽지 않다는 것을 알게 됩니다.

그래서 어지간한 경우라면 그냥 함수 원형을 선언을 미리 해주는 것이 더 안전한 방법입니다.

그러니 함수 원형을 선언하는 것은 필수라 생각하시고 하면 됩니다.

 

3. 함수 원형과 헤더 파일

함수 원형이 정의가 되는 곳은 헤더 파일입니다.

우리가 printf() 함수를 쓸 때 'stdio.h'라는 헤더 파일을 불러오죠?

그리고 이런 방법이 c언어 내에 내장되어있는 라이브러리 파일만 불러올 수 있는 것이 아닙니다.

텍스트 에디터로 파일명을 편집을 해서 확장자명을 '. h'로 바꿔주면 본인이 만든 헤더 파일을 사용을 할 수가 있습니다.

 

여기까지 c언어 함수 원형에 대하여 알아보았는데요,

다음 포스팅에서는 라이브러리 함수 중 난수 함수에 대하여 알아보는 시간을 가져보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다 ~

반응형

댓글