티스토리 뷰
<stdarg.h> 라이브러리는
함수가 인자를
갯수 형태에 상관없이 받을수있도록하는 기능을 제공합니다
이기능을 이용해서 함수가 입력받은 인자들중에서 최대값을 리턴하도록 작성해보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | int32_t _wMax(const char16_t* _lpszFormat, ...) { //함수 초기화 va_list args; va_start(args, _lpszFormat); const char16_t* lpszFormat = _lpszFormat; int32_t n = 0; const char16_t* lpszEnd; n = wcstol(lpszFormat, &lpszEnd, 0); //함수 초기화 끝 //함수 wcstol 은 stdlib.h 에 선언되 있습니다. //문자를 숫자로 변환해줍니다. //예외 처리 if (n == 0) return 0; else if (n == 1) return va_arg(args, int32_t); //큰값 작은값 변수 선언 int32_t max = va_arg(args, int32_t); int32_t min = 0; for (int32_t i = 1; i < n; ++i) { min = va_arg(args, int32_t); if (max < min) //만약 작은수가 큰수보다 크면 max = min; //작은수는 큰수가 됩니다 } va_end(args); //스택정리 return max; } | cs |
코드는 이렇습니다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | int main() { //로케일 설정 유니코드 함수들은 이함수에 지역값에따라 영향을 받습니다. //""은 현재 컴퓨터에 지정된 언어값이 설정되고 //"Korean" 이라고하시면 한국이 설정됩니다. setlocale(LC_ALL, ""); srand((uint32_t)time(NULL)); //랜덤시드 돌려주고 int32_t b[10] = { 0 }; //랜덤한 숫자배열 생성 for (int32_t i = 0; i < 10; ++i) { b[i] = rand(); //배열을 채워주고 wprintf(u"%d. 값 :: %d\n", i + 1, b[i]); //배열 출력 } int32_t max = _wMax(u"6", b[0], b[1], b[2], b[3], b[4], b[5]); //함수에 하나하나 인자들을 넣어준뒤 wprintf(u"최대값 :: %d\n", max); //결과 출력 return 0; } | cs |
그런다음 결과를 보면
잘구해졌습니다.
걍 for문으로 돌렸으면 더 단순했을까요 하하.
C 에서는 Variable Arguments 라고 하고
C++ 에서는 Variadic Template 이라고 합니다
C 에서는 타입체크가 안되서 약간 뭔가 부족한 느낌이 들지만
이기능은 C++에서 프로그래머를 무시무시한 괴물로 만들어 줍니다.
'C > Console' 카테고리의 다른 글
에라토스테네스의 체로 소수 구하기 (0) | 2018.11.16 |
---|---|
Generic() 과 <stdarg.h> 이용해서 래핑하기 2.0V (0) | 2018.11.16 |
N 진수를 입력받아서 N진수로 변환하기 (0) | 2018.11.14 |
문자를 정수로 변환하는 함수를 만들어 봅시다 (0) | 2018.11.14 |
_Generic() 과 <stdarg.h> 를 이용한 scanf() 랩핑하기 (0) | 2018.11.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- CSS
- 1000 자리 계산기
- SCSS @for
- #비주얼스튜디오
- Visual Studio 2017
- scss slider
- 도매인 가격비교
- Generic()
- gettext
- responsive slider
- #C
- dropdown list
- HTML
- wxWidgets
- _Generic()
- C
- C++
- fyling fly
- C11
- JS
- css slider
- flying bee
- CSS 슬라이더
- stdarg.h
- 도메인 가격비교
- 오류
- .editorconfig
- slider
- scanf()
- xgettext
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함