c언어 함수의 구조와 함수의 형태
- programming/C Programming
- 2020. 6. 5. 18:34
함수의 구조와 함수의 형태에 대해서 알아보겠습니다.
함수란?
수학적인 개념에서의 함수는 두 집합 사이의 관계를 설명하는 수학의 개념이라고 되어있습니다. 하지만 c언어에서의 함수는 미리 만들어 놓은 일종의 프로그램으로 반환 형태(리턴 타입)와 함수의 이름, 매개변수, 함수의 시작, 함수의 반환, 함수의 종료로 이루어져 있습니다. 이전에 사용했던 함수들을 살펴보면 printf함수와 scanf함수가 있습니다.
함수의 형태
1. 반환형이 있고 (O) 매개변수도 있는 함수 (O)
2. 반환형이 있고 (O) 매개변수가 없는 함수 (X)
3. 반환형이 없고 (X) 매개변수가 있는 함수 (O)
4. 반환형이 없고 (X) 매개변수도 없는 함수 (X)
함수의 형태는 크게 4가지로 반환형과 매개변수에 따라서 형태가 달라지게 됩니다. 반환형은 반환받을 값으 형태와 동일하게 설정하고 반환값이 없다면 void로 선언하게 됩니다. 매개변수 또한 값이 없다면 void로 선언하게 됩니다.
1. 반환형과 매개변수가 둘다 있는 함수
반환형과 매개변수가 둘 다 있는 함수로 반환 형을 int의 hongji 함수를 만들고 매개변수는 int로 전달해주는 소스입니다. 프로그램의 흐름으로 살펴보면
6라인 hongji(1) hongji함수에 인자값을 (1)로 전달하여 함수를 호출합니다. // 1 전달
11라인 int hongji(int a)로 선언된 함수가 호출되어 6라인에서 받은 1값을 변수 a에 저장합니다. // 1전달받음
13라인 printf함수로 전달받은 a값을 출력합니다. // 1출력
15라인 printf 함수를 출력합니다. //
17라인 변수 a의 값에 1을 더해줍니다. // 전달받은 1값에 1을 더함
18라인 변수 a값을 반환해줍니다. // 계산이 완료된 값 2를 호출한 곳으로 반환 시킴
6라인 hongji(1) 호출하고 반환된 값을 받게됩니다. // 반환값을 받음
#include <stdio.h>
int main(void)
{
printf("hongji함수의 리턴값 : %d \n", hongji(1));
return 0;
}
int hongji(int a) {
printf("전달 받은 a값은 :%d\n", a);
printf("a값에 1을 더해 리턴 ~ \n");
a = a + 1;
return a;
}
2. 반환형은 있고 매개변수가 없는 함수
6라인에서 인자값이 없는 () 형태의 hongji함수를 호출합니다. hongji()
11라인 반환형은 있고 매개변수가 없는(void)의 int hongji(void) 함수가 호출되어 실행됩니다.
13라인 int a를 선언하고 정수 123을 a변수에 대입합니다.
15라인 a값을 반환합니다.
6라인 hongji함수에서 반환된 a값(123)을 전달받습니다.
3. 반환형은 없고 매개변수는 있는 함수
12라인에서 hongji(int a, int b)함수에 인자값 1, 2를 전달합니다.
3라인 전달받은 1, 2를 int a와 int b에 각각 대입합니다.
5라인 printf함수를 호출해 화면에 출력합니다.
14라인 12라인에서 호출된 함수가 전달받은 인자값이 없어종료 되고 다음 소스인 14라인이 실행됩니다.
4. 반환형과 매개변수가 둘다 없는 함수
14라인과 18라인 매개변수 없는 hongji()를 호출하고 hongji 함수가 실행됩니다. hongji 함수에는 printf함수를 사용해 줄을 긋는 출력만하고 반환되는 값 없이 hongji함수가 종료됩니다.
함수를 사용하는 이유
위에서 4가지 형태의 함수들을 만들어 봤습니다. 함수를 만들어 봤는대 함수는 왜 사용할까? c언어로 프로그래밍을 하게되면 지금까지는 main함수 하나를 가지고 모든 내용을 다 다루었습니다. 하지만 만들어야하는것이 점점 생긴다면?? 하나의 함수에서 모든걸 다 하는 것이 아닌 기능별로 나누어 표현하고 필요에 따라 호출하여 사용하는 것이 더욱 편리하기 때문입니다.
'programming > C Programming' 카테고리의 다른 글
c언어 do~while문을 활용한 무한 성적입력!! (0) | 2020.06.08 |
---|---|
c언어 함수와 do~while을 활용한 무한반복 계산기 만들기! (6) | 2020.06.08 |
c언어 scanf()함수의 입력오류 ( 입력 버퍼 비우기) (3) | 2020.06.05 |
c언어 아스키 코드(ASCII code)란? "아스키 코드 표" (3) | 2020.06.05 |
c언어 반복문 '*' (삼각형,피라미드, 다이아몬드) 출력 예제 (5) | 2020.06.04 |