[ 재귀적 함수 ] |
재귀함수란 “자기 자신을 재참조하는 함수”이기 때문에 본인이 본인을 호출하는 구조로 되어있다.
한번 보자
[코드]
[결과]
남들은 보니 팩토리얼을 예제로 많이 사용했네요
팩토리얼은 그냥 공식만
n!=n×(n-1)!의 성질에서 n이 1일 때 1=1×0! 이 되므로 0!=1로 약속한다.
int factorial( int num ) { if ( num <= 1 ) return 1; else { // 재귀 호출-> num이 5라면 5, 4, 3, 2, 1들어가서 곱해지면서 리턴 1* 2* 3* 4* 5 return num * factorial( num - 1 ); } } |
재귀함수는 무한루프에 빠지지 않도록 주의를 기울여야한다.
간단 코드니 여기서 무한루프 빠져도 금방 눈에 보이지만, 프로젝트가 커지면 디버깅도 힘들고
스트레스로 인해 머리털이 빠지는 현상이 일어 날지 모른다.
생각하며 코딩하자
[ 가변 인자 함수 ] |
printf() 함수를 보면 신기한것이 있습니다.
함수원형은 stdio.h 파일에 포함되어있습니다. 자 그럼 함수 원형을 보죠.
_Check_return_opt_ _CRTIMP int __cdecl printf(_In_z_ _Printf_format_string_ const char * _Format, ...); |
printf( const char * _Format, ...);
문자열을 받는건 알겠는데, ... 이건 멀까요?
"..."
이것이 가변인자(Variable argument function)을 나타내는 것이다
자 그럼 우리도 함수 하나 만들어 봅시다.
[코드]
[결과]
간단하게 구현해봤다.
우선 몇개의 매개변수를 전달할지의 int cnt를 두고 가변인자를 둬서
printf( 3, a, b, c ); //4byte 씩 차례대로 할당이 되므로
포인터 연산하여 매개변수 갯수에 맞게 출력하게 끔 구현되었다.
─────────────────────────────────────────────
이제 좀 함수들을 이용해서
va_list, va_start(), va_end(), vsprintf() 매크로 함수를 써서 printf 함수를 만들어 보자.
[코드]
간단하게 함수 설명
va_start() 함수를 통해 가변인자 포인터변수 ap를 _vFormat_, 다음에 오는 매개변수 위치에 이동시켜고, vsprintf(); 문자열을 조립하여 pszlog에 저장합니다. va_end(); ap를 해제합니다.
[결과]
가변인자의 첫번째 매개변수는 전달될 매개변수의 갯수와 타입를 정하는데 사용한다.
ex. "%d. Hello World %s\n " int, char* 총 2개가 전달된다.
그다지 어려운 부분은 없다. MSDN 에 깊은 설명이 있으니 참고
가변인자는 왜 쓰고, 언제 쓸까?
"인자의 갯수가 정해지지않았을때, 인자의 자료형이 정해지지 않았을때"
'0x0001 > C, C++' 카테고리의 다른 글
[C언어] const 키워드 (0) | 2019.02.07 |
---|---|
[C언어] extern "C" (0) | 2019.02.07 |
[C언어] 파일 입출력, 매크로 (0) | 2019.02.07 |
[C언어] 문자열 함수, 구조체, 공용체, 열거형 (0) | 2019.02.07 |
[C언어] 배열, 포인터, 함수 호출방식 (0) | 2019.02.07 |