본문 바로가기
코딩/C 언어

C언어 기초 - 사용자 정의함수 만들기

by DIYver 2020. 7. 6.

본문 목표

 저번 포스팅까지 해서 자료형, 조건문, 반복문까지 핵심적인 것들은 다 다뤄보았다.

 

이번에는 다음으로 중요한 사용자 정의함수를 만드는 것을 이해하고

 

자신의 함수를 만들어 사용해본다.

 

 

 

 

개념 정리

사용자 정의 함수는 프로그램에서 제공하는 기본 함수들을 이용하여

 

새롭게 함수를 만드는 것이다.

 

원할 때, 호출해서 사용할 수 있으며,

 

코드를 단순히 할 때 필수적이다.

 

코드가 단순해야 나중에 문제가 생겨도 쉽게 원인을 파악할 수 있어서 중요하다.

 

 

사용자 정의함수 만들기 전에 자료형을 다시 살펴보자.

 

return 0; 을 쓸때는 뭐고

return; 을 쓸때는 뭔지 모른다면 집중하시길!

 

자료형을 간단히 하자면

 

void - 없음

char - 작은 정수 또는 문자

short - 크기가 작은 정수

int - 정수

float - 실수

double - 크기가 큰 실수

bool - 논리 값 ( 0 또는 1)

 

라고 할 수 있다.

 

이제 return 에 대해서 알아보자.

 

return 은 반환값이다.

그러니깐, 함수가 끝났을 때, 그 함수의 결과 값이다.

 

예를 들면 두 변수의 덧셈을 해주는 함수를 선언해보자.

 

int sum(int a, int b)

{

  int result = a+b;

  return result;

}

 

위와 같이 사용자 정의 함수를 만들고 main( ) 에서 호출해가지고 사용한다면

그 결과는 result 가 된다.

 

void main( )

{

  int A = sum(15, 20);

 

  return;

}

 

위와 같이 main( ) 에서 실행한다면

 

A 라는 변수에 35 라는 값이 저장된다.

 

다시 사용자 정의 함수에서 이번에는 result 가 아니라 0을 입력하면 결과가 어떻게 될까?

 

return 0; 이므로 사용자 정의 함수의 최종값은 무슨 짓을 하더라도 0이 나오게 되므로,

A 변수에는 0이 저장되게 된다.

 

 

 

살짝 부가 설명을 하자면, 순서는 다음과 같다.

 

 

 

 

 

● void - 자료형이 없으므로 그냥 return; 을 사용하면 된다.

● char - 정수를 반환하거나 문자를 반환해야 한다. return 정수; 를 사용하면 된다.

● short - 정수형을 반환해야 한다. return 정수; 를 사용하면 된다.

● int - 정수형을 반환해야 한다. return 정수; 를 사용하면 된다.

● float - 실수형을 반환해야 한다. return 실수; 를 사용하면 된다.

● double - 실수형을 반환해야 한다. return 실수; 를 사용하면 된다.

● bool - 논리 값을 반환해야 한다. return 논리값; 을 사용하면 된다.

 

 

아직 잘 이해가 안되는 부분이 있을 것이다.

 

덧셈 연산 사용자 함수를 void 와 int 로 만들어보고 그 차이를 확인해보자.

 

 

 

void 로 제작하여 사용시 ::

 

void sum(int a, int b, int c)

{

  c = a + b;

  return;

}

 

void main( )

{

  int A;

  sum(5, 10, A);

 

  return;

}

 

==> 결과 A에는 15가 저장된다.

 

 

 

int 로 제작하여 사용시 ::

 

int sum(int a, int b)

{

  return a+b;

}

 

void main( )

{

  int A;

  A = sum(5, 10);

 

  return;

}

 

===> 결과 A에는 15가 저장된다.

 

 

 

둘이 결과는 같다. 

 

그런데 사용하는 방법이 사뭇 다르다.

 

둘 중에 어떤 방식이 더 좋다고 생각하는가?

 

당연히 int 로 제작한 사용자 정의 함수가 편하다.

 

애초에 덧셈 연산을 받아서 정수로 반환할 예정이었으면

당연히 int 형으로 함수를 선언했어야 한다.

 

물론  void 를 쓴다고해서 불가능 한 것은 아니지만,

코드가 더러워지고 복잡해진다.

 

 

 

다른 자료형에서도 마찬가지다.

 

결과 값인 return 값의 자료형에 대해서 생각한다음에

 

사용자 정의함수의 자료형을 결정해야 한다.

 

 

 

 

 

 

코드

#include <stdio.h>

int sum(int a, int b)	// 덧셈 함수
{
	return a+b;
}

char next_alphabet(char a)	// 입력받은 문자 다음 알파벳 반환 함수
{
	return a + 1;
}

float circum(float r)	// 원 둘레 구하는 함수
{
	return 2 * r * 3.141592;
}

void main()
{
	printf("\n\n\n");

	printf("%t %d \n\n", sum(5, 15));
	printf("%t %c \n\n", next_alphabet(65));	//아스키코드 65 = 'A'
	printf("%t %f \n\n", circum(10));

	return;
}

 

 

 

실행 결과

 

 

 

해석

int sum(int a, int b) // 덧셈 함수
{
   return a+b;
}

 

위의 사용자 함수는 a, 와 b를 입력받아서 더해준 값을 반환하는 사용자 정의 함수이다.

 

printf("%t %d \n\n", sum(5, 15));

 

main( ) 에서 위와같이 함수를 호출하고 출력을 명령하였으므로, 5와 15를 더한 값이 출력된다.

 

 

 

char next_alphabet(char a) // 입력받은 문자 다음 알파벳 반환 함수
{
   return a + 1;
}

 

위의 사용자 함수는 아스키코드 값 a를 받아서 다음 알파벳으로 반환하는 사용자 정의 함수이다.

 

printf("%t %c \n\n", next_alphabet(65));

 

main( ) 에서 위와 같이 함수를 호출하고 출력을 명령하였으므로, 66 번에 해당하는 아스키코드 문자가 출력된다. 아스키 코드 65는 'A', 66은 'B' 이다.

 

 

 

float circum(float r) // 원 둘레 구하는 함수
{
   return 2 * r * 3.141592;
}

 

위의 사용자 함수는 실수형 반지름을 입력받아서 원의 둘레를 반환하는 사용자 정의 함수이다.

 

printf("%t %f \n\n", circum(10));

 

main( ) 에서 위와 같이 함수를 호출하고 출력을 명령하였으므로, 반지름 10에 해당하는 둘레가 실수형으로 출력된다.

 

 

 

 

 

 

결론

 

사용자 정의 함수는 사용자가 원하는 결과 값의 자료형을 우선적으로 생각해야 한다.

 

return 은 함수의 최종 결과 값이다.

 

main( ) 코드가 보기 쉬워야(가독성이 좋아야) 오류를 쉽게 잡을 수 있다.

 

 

 

 

 

 

 

도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!

감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^

댓글