컴퓨터/C
C언어에서 함수는 작성된 소스코드를 묶어서 하나의 기능으로 만들어주는 역할을 합니다.
프로그램에서 함수는 프로그램을 실행하는 하나의 단위가 됩니다.
아래의 예제로 함수 단위로 설명을 해보겠습니다.
#include <stdio.h>
int main()
{
int number = 10;
printf("함수에 대하여 알아봅시다\n");
return 0;
}
결국 함수를 실행하는 것은 소스코드 묶음을 실행하는 개념입니다. 함수를 사용하면 다음과 같은 장점을 얻을 수 있습니다.
함수는 크게 2가지 종류로 구분될 수 있습니다.
결국 두 함수 모두 소스코드를 함수화 시켜 사용자가 조금 더 편리하게 사용할 수 있게 만든 개념입니다.
본문에서는 사용자 정의 함수를 만들어보고 활용해 보는 것에 중점을 두도록 하겠습니다.
라이브러리 함수의 경우 추후에 좀 더 자세히 다뤄보도록 하겠습니다.
사실 지금까지 우리는 항상 main함수를 선언과 정의해서 프로그램을 만들어 봤습니다.
이제 사용자 정의 함수를 선언과 정의해서 함수를 만들어 보도록 합시다.
함수의자료형 함수의이름(매개변수의자료형 매개변수의 이름, ....) { 소스코드 ~~~; return 리턴항목; } |
함수의 자료형은 기본자료형과 사용자 정의 자료형 모두 사용할 수 있습니다. 함수가 끝나면서 제공할 값의 데이터 타입을 정의 내립니다.
2가지 정도 기본 자료형을 가지고 함수 선언을 해보도록 하겠습니다.
#include<stdio.h>
void func_void()
{
printf("아무것도 반환하지 않는 함수의 자료형 입니다.\n");
return ;
}
int func_int()
{
printf("이 함수는 int 타입의 데이터를 반환 합니다.\n");
return 1;
}
void 타입의 자료형을 이용하면 해당 함수는 종료 시 아무 반환이 없는 형태의 함수가 됩니다.
int 타입의 자료형을 이용하면 해당 함수는 종료 시 return 뒤에 있는 값을 반환을 합니다.
함수의 매개변수는 처음 함수를 실행 할기 전 기초 정보가 됩니다. 매개변수는 개수는 제한이 없지만 해당 함수 안에서 선언되는 변수들의 이름과 혼동이 되지 않게 해야 됩니다.
#include<stdio.h>
void func_voidplus(int a, int b)
{
printf("아무것도 반환하지 않는 함수의 자료형 입니다.\n");
printf("%d + %d = %d 입니다.\n",a,b,a*b);
return ;
}
int func_intplus(int a, int b)
{
printf("이 함수는 int 타입의 데이터를 반환 합니다.\n");
printf("%d + %d = %d 입니다.\n",a,b,a*b);
return a*b;
}
두 함수 다 초기 매개변수 a와 b를 받고 함수 안에서 이용할 수 있습니다.
함수를 선언하고 정의가 완료되면 그 함수를 main함수든 어떤 다른 곳에서든 실행을 시킬 것입니다. 이런 실행시키는 행위를 함수의 호출이라고 합니다. 함수를 호출하기 위해서는 정의된 함수에 정확한 매개변수를 전달해야 됩니다.
#include<stdio.h>
void func_voidplus(int a, int b)
{
printf("아무것도 반환하지 않는 함수의 자료형 입니다.\n");
printf("%d + %d = %d 입니다.\n",a,b,a*b);
return ;
}
int func_intplus(int a, int b)
{
printf("이 함수는 int 타입의 데이터를 반환 합니다.\n");
printf("%d + %d = %d 입니다.\n",a,b,a*b);
return a*b;
}
int main()
{
int a = 10;
int b = 20;
float c = 0.5;
func_voidplus(a,b);
func_voidplus(b,c); // 에러 발생 선언된 자료형과 다름 !
return 0;
}
함수는 본문에서 설명한 것과 같이 다양한 형태로 정의 내리고 사용할 수 있습니다. 크게 4가지 형태로 구분 지을 수 있습니다.
예제 1) void 함수명()
#include <stdio.h>
void menu_print()
{
printf("게임을 시작합니다.");
printf("1. 공격");
printf("2. 방어");
return;
}
int main()
{
menu_print();
return;
}
예제 2) void 함수명() - 함수 안에 함수 써보기
#include <stdio.h>
void endline()
{
printf("\n");
return;
}
void menu_print()
{
printf("게임을 시작합니다.");
endline();
printf("1. 공격");
endline();
printf("2. 방어");
endline();
return;
}
int main()
{
menu_print();
return;
}
예제 3) void 함수명(매개변수)
#include <stdio.h>
void endline(int count)
{
for (int i = 0; i < count; i++)
{
printf("\n");
}
return;
}
void menu_print()
{
printf("게임을 시작합니다.");
endline(2);
printf("1. 공격");
endline(1);
printf("2. 방어");
endline(1);
return;
}
int main()
{
menu_print();
return;
}
예제 4) 자료형 함수명() 예제
#include <stdio.h>
void endline(int count)
{
for (int i = 0; i < count; i++)
{
printf("\n");
}
return;
}
void menu_print()
{
printf("게임을 시작합니다.");
endline(2);
printf("1. 공격");
endline(1);
printf("2. 방어");
endline(1);
printf("원하는 명령을 입력하세요 : ");
return;
}
int input_command()
{
int num;
scanf_s("%d", &num);
return num;
}
int main()
{
int menu_number;
menu_print();
menu_number = input_command();
return;
}
예제 5) 자료형 함수명(매개변수)
#include <stdio.h>
void endline(int count)
{
for (int i = 0; i < count; i++)
{
printf("\n");
}
return;
}
void menu_print()
{
printf("게임을 시작합니다.");
endline(2);
printf("1. 공격");
endline(1);
printf("2. 방어");
endline(1);
printf("원하는 명령을 입력하세요 : ");
return;
}
int input_command()
{
int number;
scanf_s("%d", &number);
return number;
}
int Att(int userAtt, int comHP)
{
printf("공격합니다 ! \n");
printf("적의 남은 체력은 %d 입니다!\n", comHP - userAtt);
return comHP - userAtt;
}
int Def(int comAtt, int userHP)
{
printf("방어합니다 ! \n");
printf("나의 남은 체력은 %d 입니다!\n", userHP - comAtt);
return userHP - comAtt;
}
int main()
{
int menu_number;
int userHP = 100;
int userAtt = 10;
int comHP = 50;
int comAtt = 5;
menu_print();
menu_number = input_command();
if (menu_number == 1)
{
comHP = Att(userAtt, comHP);
}
else if (menu_number == 2)
{
userHP = Def(comAtt, userHP);
}
else
{
printf("잘못된 값을 입력했습니다.");
}
return;
}
이처럼 함수의 형태를 자유롭게 이용하여 사용해보고 적용해 보세요.
이런 함수들을 잘 사용한다면 공격을 100번 하기 위해선 100번의 함수 이름만 적으면 됩니다(재사용성)
공격을 수정하기 위해선 100번의 수정이 아닌 함수가 정의된 부분의 수정만 하면 됩니다(모듈화)등 장점이 많으니 다양한 형태의 함수를 자유롭게 사용할 수 있도록 해봅시다.
C 언어 - 지역변수와 전역변수 (0) | 2021.06.08 |
---|---|
C 언어 - 용어 알아보기 (0) | 2021.06.08 |
C 언어 - 제어문 break / continue / return (0) | 2021.06.05 |
C 언어 - 반복문 do while문 (0) | 2021.06.05 |
C 언어 - 반복문 for (0) | 2021.06.04 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet