[C언어] 10. 함수(function)와 매개변수

이번에는 C언어의 함수(function)에 대해 알아보자.





함수

함수란

1) 함수란(function)

  • 특정한 작업을 처리하도록 작성한 프로그램 단위
  • 필요한 입력을 받아 원하는 어떤 기능을 수행한 후 결과를 반환(return)하는 프로그램


2) 함수의 종류

  • 라이브러리 함수(library function)
    • 표준함수(standard function)
    • 이미 개발환경에 포함되어 있는 함수
    • 함수 내부 구현 방법을 몰라도 입력값과 반환값만 이해하면 쉽게 사용 가능
  • 사용자 정의 함수(user defined function)
    • 필요에 의해 개발자가 직접 개발하는 함수





사용자 정의함수

함수정의와 호출

1) 사용자 정의함수 사용하기

  • 사용자 정의 함수를 사용하기 위해선 아래 3가지가 필요하다
    • 함수선언(function declaration)
    • 함수호출(function call)
    • 함수정의(function definition)
#include <stdio.h>

//함수선언
void massage();	//함수 원형
void cacao();	//함수 원형

int main(void)
{
	put("main function start");	//라이브러리 함수 호출
	massage();					//사용자 정의 함수 호출
	cacao();					//사용자 정의 함수 호출
	put("main function finish");
}

//함수정의
void massage()
{
	puts("\t메시지다!!!");
}

//함수정의
void cacao()
{
	puts("\t카톡!카톡!");
}



함수선언(function definition)

1) 함수선언의 필요성

  • 정의된 함수를 호출하기 전, 함수를 선언하는 함수원형(function prototype)이 필요
  • 함수의 사용을 미리 컴파일러에게 알림
  • 프로그램을 이해하기 쉽게 도와 줌

2) 함수선언 방법 👉 함수원형(function prototype) 이용

  • 함수원형: 함수를 선언하는 문장
  • 반환형 함수이름(매개변수 목록);
  • 변수이름 생략가능



함수정의(function definition)

1) 함수정의란? 함수머리(function header)와 함수몸체(function body)로 구성

  • 함수머리(function header) : 반환형, 함수이름, 매개변수 목록으로 구성
    • 반환형: 함수 결과값의 자료형, 반환값이 없으면 void
    • 함수이름: 식별자 생성규칙을 따름
    • 매개변수 목록: 자료형 변수이름의 쌍, 콤마(,)로 구분
  • 함수몸체(function body)
    • {...} 중괄호로 시작하여 중괄호로 종료
    • 함수가 수행해야할 문장을로 구성
    • 마지막은 대부분 결과값을 반환하는 return문장으로 종료(생략가능)
//function header
//반환형 반환값이 없으면 void
반환형 함수이름(매개변수 목록)
{//function body
	stmt;

	//retuna 1;
	//return (a+b);
	//return ;
	//return 'a';
	return (반환연산식);
}



함수호출(function call)

1) 정해진 함수를 실행(호출)하려면

  • 함수 호출(function call)이 필요
  • 호출 시 괄호 안에 적절한 매개변수가 필요
int max = findMax(a, b);





매개변수

매개변수란

1) 매개변수(parameter)의 종류

  • 형식매개변수(formal parameters)
    • 함수 정의에서 기술되는 매개변수
    • 함수 내부에서만 사용될 수 있다

      함수호출 시 메모리에 형식인자변수가 메모리에 할당(allocation)되고, 함수가 종료되면 메모리에서 자동으로 제거(free, deallocation)

  • 실매개변수(real marameter) = 실인자(real argument) = 인자(argument)


2) 매개변수로 배열 사용하기 👉 배열과 배열의 크기를 함께 전달

  • 형식매개변수에서 배열 자차에 배열 크기를 기술하는 것은 의미가 없으므로 생략
  • 함수내부에서 배열의 크기를 알 수 없으므로 배열의 크기를 하나의 인자로 사용
//함수원형
int sumary(int array[], int n);

//함수정의
int sumary(int array[], int SIZE)
{

}

//함수호출
int i = sumary(data, 5);


3) 매개변수로 2차원 배열 사용하기

  • 다차원 배열을 인자로 이용: 함수원형과 함수정의의 헤더에서 첫 번재 대괄호 내부의 크기를 제외한 다른 모든 크기를 반드시 기술
//함수원형
double sum(double data[][3], int, int);

//함수정의
double sum(double data[][3], int rowsize, int colsize)
{

}

//함수호출
double sum_value = sum(x, rowsize, colsize);





라이브러리 함수

라이브러리 함수와 헤더파일

  • c언에에는 라이브러리 함수를 위한 함수원형, 상수, 매크로가 헤더파일에 저장되어 있음
헤더파일처리작업
stdio.h표준 입출력 작업
math.h수학 관련 작업
string.h문자열 작업
time.h시간 작업
ctype.h문자 관련 작업
stdlib.h여러 유틸리티(텍스트를 수로 변환, 난수, 메모리 할당 등)함수



난수 라이브러리 함수

  • 난수(random number)란

    특정한 나열 순서나 규칙을 가지지 않는 연속적인 임의의 수


1) 함수 rand()

  • 함수원형 정의 :
  • 0에서 32767사이의 정수 중에서 임의로 하나의 정수 반환



수학 관련 라이브러리 함수

  • double sin(double x) : 삼각함수 sin *