본문 목표
저번 포스팅까지 해서 자료형, 조건문, 반복문까지 핵심적인 것들은 다 다뤄보았다.
이번에는 다음으로 중요한 사용자 정의함수를 만드는 것을 이해하고
자신의 함수를 만들어 사용해본다.
개념 정리
사용자 정의 함수는 프로그램에서 제공하는 기본 함수들을 이용하여
새롭게 함수를 만드는 것이다.
원할 때, 호출해서 사용할 수 있으며,
코드를 단순히 할 때 필수적이다.
코드가 단순해야 나중에 문제가 생겨도 쉽게 원인을 파악할 수 있어서 중요하다.
사용자 정의함수 만들기 전에 자료형을 다시 살펴보자.
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( ) 코드가 보기 쉬워야(가독성이 좋아야) 오류를 쉽게 잡을 수 있다.
도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!
감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^
'코딩 > C 언어' 카테고리의 다른 글
C언어 기초 - 헤더파일 만드는 방법과 사용하는 방법 (0) | 2020.07.08 |
---|---|
C언어 기초 - 포인터 와 주소 이해하기, pointer (1) | 2020.07.08 |
C 언어 기초 - 반복문 for 이해하기 (0) | 2020.07.06 |
C언어 기초 - 반복문 while 이해하기 (0) | 2020.07.05 |
C언어 기초 - 조건문 if , else if, else 이해하기 (2) | 2020.07.05 |
댓글