지금까지배운 함수중 예제를 자세히 보면 모두 int main()이 맨 끝으로 가있는걸 볼수있었습니다.

만약 int main()이 위로가고 그 밑에 함수가 정의되면 어떻게 될까요??


결론부터 말하자면 컴파일 오류가 발생합니다.

c언어는 위에서부터 차례로 읽어나가는 언어이기때문에 함수의 정의가 미리 되어있지 않으면 int main()형은 해당 함수에대하여 정보가 없기때문에 일단 int형인수를 보냅니다. 하지만 해당 함수가 double형으로 정의되어있는것을 발견하고 오류를 내뿜는다고 생각하시면됩니다.


함수를 사용할 때는 미리 컴파일러에게 함수에 대한 정보를 알려줘야하며 항상 함수를 먼저 정의하고 나중에 사용하는 것이 원칙이지만 이렇게 하지 못하는 경우에는 함수 원형이라는것을 정의해줍니다.


함수 원형은 몸체를 제외한, 이름, 매개변수, 반환형을 함수가 정의도기 전에 미리 알려주는 것입니다. 최소한의 정보만 미리 알려주고 main()함수가 미리 파악할수 있게 만들어주는것이죠.

1
2
3
4
5
6
7
 
double F_to_c(double f_temp);
 
 
double C_to_F(double c_temp);
 
 
cs


이런 식으로 main()함수 위에 미리 정의해주는겁니다. 함수 원형은 끝에 세미콜론(;)을 꼭 넣어주시는것을 기억해야합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*온도 변환기
333p*/
#include <stdio.h>
 
void printopt();
 
double F_to_c(double f_temp);
 
double C_to_F(double c_temp);
 
 
int main()
{
    char user_input;
    double user_temp_input;
    while (1)
    {
        printopt();
        printf("변환 종류를 입력해주세요.\n맨앞의 1글자만 인식합니다.:");
        user_input = getchar();
 
        if (user_input == 'q')
        {
            break;
        }
        else if (user_input == 'c')
        {
            printf("섭씨 온도를 입력해주세요 :");
            scanf("%lf"&user_temp_input);
            printf("변환된 화씨온도는 %lf입니다.\n", C_to_F(user_temp_input));
        }
        else if (user_input == 'f')
        {
            printf("화씨 온도를 입력해주세요 :");
            scanf("%lf"&user_temp_input);
            printf("변환된 섭씨온도는 %lf입니다.\n", F_to_c(user_temp_input));
        }
        getchar();
    }
}
 
double F_to_c(double f_temp)
{
    return(f_temp - 32.0* 5.0 / 9.0;
}
double C_to_F(double c_temp)
{
    return(9.0 / 5.0* c_temp + 32;
}
 
void printopt()
{
    printf(" \'c\' 섭씨온도에서 화씨온도로 변환\n");
    printf(" \'f\' 화씨온도에서 섭씨온도로 변환\n");
    printf(" \'q\' 종료\n");
}
 
 
 
cs

함수 원형을 미리 정의하고 코드를 작성해 나가도 결과는 같습니다. main() 몸체부터 코드를 써내려가기때문에 프로그래밍하기도 좋습니다.

'C 프로그래밍 > 6. 함수' 카테고리의 다른 글

6.6 함수를 사용하는 이유  (0) 2019.06.18
6.5 라이브러리 함수(난수)  (0) 2019.06.18
6.3 매개 변수와 반환값.  (0) 2019.06.18
6.2 함수의 정의  (0) 2019.06.18
6.1 함수란??  (0) 2019.06.18