ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 함수
    C & C++ 2023. 1. 16. 21:39
    반응형
    SMALL

    C언어에서 함수는 시작이자 끝이다.

    함수는 반환 데이터 타입, 함수명, 파라미터(Parameter, 또는 매개변수) 의 구조로 되어 있다.

    반환 데이터 타입   함수명( 파라미터1, ... 파라미터n) {
         // 코드 블럭
         // 반환값 (return ;)
    }     

     

    함수의 반환 데이터 타입은 C언어에서 사용하는 7개의 데이터 타입을 사용할수 있으며, 각 타입의 포인터형을 사용할 수 있다. 또한 함수는 반환 데이터를 갖지 않아도 되는데, 이때는 이러한 함수를 정의 또는 구현할때 반드시 void를 사용하여 반환값이 없다는것을 알려야 한다. 

    함수명은 개발자가 마음대로 지정하여 정할수 있고 변수명을 제작할때와 같이 그 규칙을 따라서 만들어야 한다.

    파라미터는 있어도 되고 없어도 된다. 파라미터가 없는 경우 함수를 정의할때 파라미터가 없다는 뜻으로 void를 써서 정의해야 한다. 파라미터는 여러개 있을수도 있는데, 여러개 있는 경우 각각을 모두 정의해주어야 한다.

    함수가 반환값을 갖을 경우에는 반드시 해당함수의 어떤 부분에서 return 반환값; 을 해주어야 하며,  반환값의 데이터 타입은 위에 정의한 함수의 반환 데이터 타입과 일치해야 한다. 

     

    함수는 정의, 구현, 사용의 3단계로 볼 수 있다.

    #include <stdio.h>
    int main() {
        // printf 함수를 "사용"하고 있다.
        // printf함수도 누군가 "구현"해 놓은걸 사용하고 있는것이다.
        printf("Hello World!!!\n"); 
        return 0;
    }

    함수의 원형 정의

    함수를 사용하려면 먼저 사용하려는 함수의 원형이 정의되어 있어야 한다.

    위 예제에서 printf()함수를 사용할 수 있는것은 stdio.h에 원형이 정의되어 있기 때문에 main함수에서 사용이 가능한 것이다. 다만 함수의 원형 정의와 구현을 동시에 해도 된다.

     

    Example 1 Example 2  Example 3 (Error)
    int MyFunc(int nParam);

    int main() {
        MyFunc(1);
    }

    int MyFunc(int nParam) {
        printf( nParam );

        return nParam;
    }
    int MyFunc(int nParam) {
        printf( nParam );

        return nParam;
    }

    int main() {
        MyFunc(1);
    }
    int main() {
        MyFunc(1);
    }

    int MyFunc(int nParam) {
        printf( nParam );

        return nParam;
    }

    위 표에서 Example 1, 2는 모두 사용가능하다, Example 1은 함수의 원형을 먼저 정의하고 나중에 함수를 구현하고 있는 것이고, Example 2는 원형의 정의없이 해당 함수를 사용하기전에 함수를 구현해 놓았다.

    반면 Example 3은 MyFunc라는 함수를 정의 이전에 사용하고 있는데 이렇게 사용을 하게되면  main()함수에서는 MyFunc()라는 함수를 어떻게 이용하는지 방법을 몰라 Error를 일으킨다. 함수는 반드시 사용하기 전에 구현이나 정의를 필수로 해야 사용이 가능하다.

     

    함수의 사용(호출)

    함수를 사용한다 라고하는 것보다 함수를 호출한다고 표현한다. 함수의 호출은 함수의 정의를 잘보고 해당 호출 규칙에 맞게 호출하면 된다.

    Example 1 Example 2 Example 3 (Error)
    int MyFunc(int nParam);

    int main() {
       MyFunc(1);
       return 0;
    }

    int MyFunc(int nParam) {
       return nParam + 1;
    }
    int MyFunc(int nParam);

    int main() {
       int nRet = MyFunc(1);
       printf("%d", nRet);
       return 0;
    }

    int MyFunc(int nParam) {
       return nParam + 1;
    }
    int MyFunc(int nParam);

    int main() {
       MyFunc(1, 3);
       return 0;
    }

    int MyFunc(int nParam) {
       return nParam + 1;
    }

    위 예제에서 Example 3은 에러를 유발하는데 함수 호출규칙에 맞지 않게 호출을 했기 때문이다. MyFunc라는 함수는 위에 정의되어 있기를 한개의 파라미터만 받을수 있으나 MyFunc(1, 3)은 정의와 맞지 않게 2개의 파라미터(또는 매개변수 라고도 한다)를 전달하고 있기 때문에 컴파일 에러를 발생한다.

    Example 1은 함수를 호출하고 리턴값을 따로 받지 않고 있는데, 이렇게 리턴값을 받지 않아도 무관하다.

    반응형
    LIST

    'C & C++' 카테고리의 다른 글

    숫자 야구 게임 만들기  (0) 2023.01.17
    배열  (0) 2023.01.16
    반복문  (0) 2023.01.16
    제어문  (0) 2023.01.16
    연산자(Operators)와 우선순위  (0) 2023.01.16
Designed by Tistory.