Programming/빡공(Nefus)

170329(수)

Jubil 2017. 3. 29. 16:09
반응형


C언어


-함수란?


-사용자 정의 함수 (선언과 구현, 호출)


-함수 원형 선언


---------------------------------------------------------------------------------------------



1. 함수란?


기능을 구현하는 부분을 따로 떼어 구현하는 것

이라고 한다.


함수는 일단 반복 해야하는 기능들이 있을 때 사용하고,

보기에도 깔끔하다.


또 유지보수가 편리하다.


함수는 이런 모양으로 생겼는데


함수에 입출력이 있을 때,

반환 자료형을 앞에 써주고 입력은 ()안에 인수로 주어진다.


main() 함수에 인수가 쓰여져 있지 않은데,

사실 void가 생략된 것이다.


함수에는 두 종류가 있는데,

사용자 정의 함수와 라이브러리 함수로 나뉜다.


라이브러리 함수는 우리가 잘 알고있는

printf(); scanf(); 등 라이브러리에서 가져온 함수를 말하고


사용자 정의 함수는 내가 직접 함수를 구현하는 것이다.

내 맘대로.


필자는 사용자 정의 함수만 설명하겠다.



2.  사용자 정의 함수 (선언과 구현, 호출)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int sumFunction(int n1, int n2) {
    return(n1 + n2);
}
 
int main(void){
    int num1, num2, sum;
 
    printf("숫자1 : ");
    scanf("%d"&num1);
    printf("숫자2 : ");
    scanf("%d"&num2);
 
    sum = sumFunction(num1, num2);
 
    printf("결과 : %d\n", sum);
}
cs



이 형식으로 sumFunction()이라는 함수를 구현했다.

그리고 main()함수에서 sumFunction()을 호출했다.


sum = sumFunction();

이렇게 호출 해서 return된 값을 sum이라는 변수에 저장하게 했다.


그리고 printf();로 sum을 출력하면 된다.



함수는 다른 함수의 몸체에서도 호출 할 수 있고,

다른 함수의 호출에서도 호출 할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int a, b;
 
int getNumber() {
    scanf("%d %d"&a, &b);
    add(a, b); //함수에 몸체에서 함수 호출
}
 
int add(int num1, int num2) {
    return num1 + num2;
}
 
int main() {
    printf("더한 값은 : %d\n", getNumber()); //함수 호출에서 함수 호출
}
cs



이렇게 말이다.




3. 함수 원형 선언


C언어 함수를 연습하다보면

왜 main 함수 밑에 함수를 선언하고 main에서 호출하면 오류가 날까

(main함수를 가장 밑에 두어야만 실행이 될까)

궁금할 때가 있을 것이다.


바로

C언어는 절차지향 언어이기 때문에 위에서 아래로 실행하게 되는데

가장 위에 main 함수를 작성하고 함수를 메인 함수 밑에 정의를 한다면

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
#include <stdio.h>
 
int sum(int n1, int n2);
//int sum(int, int);  이렇게 매개변수의 자료형만 써도 된다.
int minus(int n1, int n2);
int multiple(int n1, int n2);
int separate(int n1, int n2);
 
 
int main(void){
    int op, num1, num2, result;
 
    printf("1. Sum  2. Minus  3. Multiple  4. Separate : ");
    scanf("%d"&op);
    printf("숫자 2개 입력 : ");
    scanf("%d %d"&num1, &num2);
 
    switch (op){
    case 1: result = sum(num1, num2); break;
    case 2: result = minus(num1, num2); break;
    case 3: result = multiple(num1, num2); break;
    case 4: result = separate(num1, num2); break;
    }
 
    printf("결과 : %d\n", result);
    return 0;
}
 
int sum(int n1, int n2) {
    return(n1 + n2);
}
 
int minus(int n1, int n2) {
    return(n1 - n2);
}
 
int multiple(int n1, int n2) {
    return(n1 * n2);
}
 
int separate(int n1, int n2) {
    return(n1 / n2);
}
cs



이렇게 함수의 원형을 위에 써주고

main() 함수 아래에서 구현 해줘도 된다.

이는 컴퍼일러에게 아래 쪽에 해당 이름의 함수가 있으니

해당 함수가 호출되더라도 당황하지 말고 아래 쪽 함수를 이용하라는 의미를 가진다.

(참고 : enter.tistory.com/59)


반응형

'Programming > 빡공(Nefus)' 카테고리의 다른 글

2017.07.25(화) - 웹 과제  (0) 2017.07.25
2017.05.21(일) - 게임 프로젝트 보고서  (0) 2017.05.21
170324(금)  (0) 2017.03.25
170322(수)  (0) 2017.03.22
170320(월)  (0) 2017.03.20