자주 사용하는 알고리즘은 함수로 만들어요. 함수 선언, 함수 정의, 함수 호출[언제나 C언어]

안녕하세요. 언제나휴일의 언휴예요.

프로그램을 만들다 보면 자주 사용하는 알고리즘이 있어요.

이러한 코드는 이름(함수 명), 알고리즘에 필요한 입력 인자(입력 매개변수), 원하는 결과(리턴 타입)를 정하여 알고리즘을 전개하여 함수로 만들 수 있습니다.

함수를 만들면 필요할 때 함수를 호출하여 사용할 수 있어요.

함수 개요

함수
함수

우리는 초등학교부터 함수에 관한 교육을 받아왔어요.

블랙 박스에 입력 값을 넣으면 출력 값이 나오는 형태, y = x+2 처럼 방정식 형태, 정의역과 공역의 요소를 매핑하는 형태와 f(x) = x+2 등 다양하게 다루었어요.

함수 정의문

C언어의 함수 관련 문법은 크게 함수 정의문, 함수 호출문, 함수 선언문이 있어요.

함수 정의문은 함수를 만드는 구문을 말합니다.

함수 명과 입력 매개변수 목록과 반환 형식, 그리고 수행할 알고리즘으로 정의할 수 있어요.

반환 형식 함수 명 (입력 매개변수 목록)

{

    알고리즘

}

예를 들어 세 개의 정수의 합계를 구하는 함수는 다음처럼 만들 수 있어요.

int SumThreeIntegers(int a,int b, int c)
{
    return a+b+c;
}

함수 이름은 SumThreeIntegers라고 정했어요.

함수 이름 앞에 int는 반환 형식입니다. 이 함수를 사용하는 곳에서 원하는 값의 형식이죠.

함수 이름 뒤에 소괄호 내부에는 입력 매개변수 목록이 옵니다. 여기에서는 세 개의 정수 a, b, c입니다.

입력 매개변수는 함수를 사용하는 곳에서 전달해 주는 값을 사용하는 이름입니다.

그리고 함수에서 수행할 알고리즘은 중괄호 내부에 작성합니다.

호출한 곳에 수행 결과를 반환하거나 함수를 끝낼 때 return을 사용합니다.

함수 호출문

함수를 사용하는 코드를 함수 호출문이라고 불러요.

함수 호출에 필수적인 요소는 함수 이름과 입력 인자 목록이예요.

입력 인자 목록은 정의한 함수의 입력 매개변수 목록에 맞게 전달해야 합니다.

함수 호출 결과를 사용하는 것은 호출하는 곳에서 선택 사항입니다. 필요하면 반환 형식에 맞는 변수에 대입 연산 뒤에 호출문을 표현합니다.

int s = 0;
s = SumThreeIntegers(3,2,5);

함수 선언문

C언어에서 작성한 코드를 컴파일할 때 확인하지 못한 함수를 호출하는 부분을 만나면 컴파일 경고가 발생합니다.

#include <stdio.h>
int main()
{
    int s = 0;
    s = SumThreeIntegers(3, 2, 5);
    printf("%d+%d+%d = %d\n",3,2,5, s);
    return 0;
}
int SumThreeIntegers(int a, int b, int c)
{
    return a + b + c;
}

위 코드는 SumThreeIntegers 함수 정의문보다 호출문이 먼저 나옵니다. 이를 컴파일하면 호출문이 제대로 작성한 것인지 판단하지 못합니다.

다음은 Visual Studio에서 빌드하였을 때 나오는 컴파일 경구 문구입니다.

다시 빌드 시작...
1>------ 모두 다시 빌드 시작: 프로젝트: 임시 테스트, 구성: Debug x64 ------
1>Program.c
1>C:\언제나C언어\함수개요\Program.c(5,9): warning C4013: 'SumThreeIntegers'이(가) 정의되지 않았습니다. extern은 int형을 반환하는 것으로 간주합니다.
1>함수개요.vcxproj -> C:\언제나C언어\함수개요\x64\Debug\함수개요.exe
1>"함수개요.vcxproj" 프로젝트를 빌드했습니다.
========== 모두 다시 빌드: 1 성공, 0 실패, 0 건너뛰기 ==========

C언어에서는 함수 호출문보다 함수 정의문 혹은 함수 선언문이 앞에 오게 작성합니다.

함수 선언문은 반화 형식과 함수 명, 입력 매개변수 목록을 명시하는 구문입니다.

함수 선언문에 표현하는 것을 함수 시그니쳐(Signature)라고도 부릅니다.

반환 형식 함수 명 (입력 매개변수 목록);

함수 선언문에서 입력 매개변수 목록을 표현할 때 변수 명은 생략이 가능하지만 보통 생략하지 않고 표현하는 것을 권장합니다. 이는 호출하여 사용하는 곳에서 어떠한 의미의 값을 전달해야 하는지 파악하는 힌트로 사용할 수 있기 때문입니다.

다음은 함수 선언문, 호출문, 정의문으로 구성한 예제 코드입니다.

#include <stdio.h>
int SumThreeIntegers(int a, int b, int c); //함수 선언문
int main()
{
    int s = 0;
    s = SumThreeIntegers(3, 2, 5); //함수 호출문
    printf("%d + %d + %d = %d\n",3,2,5, s);
    return 0;
}
int SumThreeIntegers(int a, int b, int c) //함수 정의문
{
    return a + b + c;
}

실행 결과

3 + 2 + 5 = 10