함수(20170314)
* 함수 : 프로그램이 수행하고자 하는 기능에 대한 명령문의 집합.
함수는 블랙박스와도 같다. 왜냐하면 주어진 입력에 대해 구체적으로 어떤 처리과정을 거치는지 알지 못해도
그 결과를 얻을 수 있도록 만들어지기 때문이다.
- 입력은 여러 인자가 가능하나, 출력은 반드시 하나다.
* 함수의 정의와 실행
- 정의, 호출
- 함수의 리턴형 : int getaaa(int num) --> 첫번째 int가 리턴형
> 함수의 리턴형을 생략하면,
c의 가장 기본이 되는 데이터형인 int형을 리턴하는 함수로 간주
. 함수는 반드시 하나의 값만 리턴한다
- 함수의 이름
> 변수명을 만드는 규칙에 따라 생성, 가급적 기능에 맞는 이름을 부여
- 함수의 매개변수 : 함수 기능을 수행하기 위해 필요한 값을 넘겨주기 위한 변수
> 매개변수 == 인자
- 함수의 헤더와 바디
> 헤더 : 리턴형 함수이름(매개변수)
ex) int main(int argc, char *argv[])
> 바디 : 이하내용
{
printf("Hello xxxxxx. ......
}
- 함수의 호출 : 함수의 기능을 사용하는 것
> 원하는 함수의 이름을 불러줌 : ex) sum();
> 함수의 중복 호출 : 메인함수 외 일반 함수에서도 다른 함수 호출 가능
- 함수의 선언 형식
* 다양한 형태의 함수
- void() : 키워드 void를 이용해 입력이 없거나 출력이 없는 함수를 정의할 수 있음
ex)
#include <stdio.h>
#include <stdlib.h>
void noreturn(void)
{
printf("Hello, guys.");
}
int main(int argc, char *argv[]) {
noreturn();
noreturn();
noreturn();
return 0;
}
결과) Hello, guys.Hello, guys.Hello, guys.
- return 값이 있는 함수
> 함수가 리턴 값을 함수를 호출한 곳으로 넘겨줌
ex)
#include <stdio.h>
#include <stdlib.h>
int sum(void)
{
int a,b;
a=6,b=7;
return a+b;
}
void main(void)
{
int hap;
hap=sum();
printf("hap=%d",hap);
}
결과) hap=13
- 다양한 인자의 함수
> 인자는 수식이 올 수도 있음
> 인자는 다른 함수가 올 수도 있음
ex) int result = GetSum(Fact(5));
- 인라인(inline) 함수, 일반함수
> 호출해야 하는 부분에 해당 함수코드를 추가해 두기 때문에 해당 함수로 분기하지 않아도 된다. : 인라인 함수
. 실행속도 빨라짐
. 실행코드는 길어짐
> 함수를 호출할 때 해당 함수의 위치를 찾아서 해당 함수가 있는 코드로 분기한다. : 일반 함수
> 인라인 함수 예
inline int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main(void)
{
printf("3과 2중 최대값은 : %d\n\n",max(3,2));
}
결과) 3과 2중 최대값은 : 3
--------------------------------
Process exited after 0.05959 seconds with return value 22
cf. inline을 제거하고 수행하면,
결과) 3과 2중 최대값은 : 3
--------------------------------
Process exited after 0.342 seconds with return value 22
그렇군. inline이 빠르군!
- 재귀함수 : 생략
- 가변인자 함수
>인수의 개수가 일정치 않은 함수 : printf(), scanf() ...
> int sum(int n, ...) 등으로 사용
> 사용시에는 헤더파일 추가가 필요 : #include <stdarg.h>