일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Flutter
- c# winform
- c언어
- 깃
- Unity
- HTML
- Houdini
- C++
- vim
- Data Structure
- jupyter lab
- 도커
- C# delegate
- 구조체
- 플러터
- c# 윈폼
- c# 추상 클래스
- Python
- gitlab
- jupyter
- Algorithm
- c#
- git
- C언어 포인터
- docker
- 다트 언어
- dart 언어
- github
- 포인터
- 유니티
Archives
- Today
- Total
nomad-programmer
[Programming/C] 가변 인자 함수 본문
가변 개수의 인자를 받는 함수를 가변 인자 함수(Variadic Function)라고 한다. C 표준 라이브러리에는 직접 가변 인자 함수를 만들 수 있게 도와주는 여러 매크로(Macro)를 포함하고 있다.
#include <stdio.h>
// 가변 인자 함수를 정의하려면 stdarg.h 파일을 인클루드해야 한다.
#include <stdarg.h>
// 가변 인자 함수
int print_ints(int args, ...){
int tmp;
int sum = 0;
va_list ap;
// 어디에서부터 가변 인자가 시작되는지 알려준다.
va_start(ap, args);
// 모든 가변 인자 출력
for(int i=0; i<args; i++){
tmp = va_arg(ap, int);
sum += tmp;
printf("argument: %d\n", tmp);
}
// va_end 매크로를 호출하면 가변 인자를 다 읽었다고 알려준다.
va_end(ap);
return sum;
}
int main(void) {
int result = 0;
// 첫 번째 인자는 고정 인자이다. 가변 인자가 몇개인지 전달한다.
result = print_ints(5, 12, 15, 18, 20, 100);
puts("");
printf("total: %d\n", result);
return 0;
}
// 결과
/*
argument: 12
argument: 15
argument: 18
argument: 20
argument: 100
total: 165
*/
정리
* 가변 개수 인자를 받는 함수를 가변 인자 함수라고 한다.
* 가변 인자 함수를 만드려면 stdarg.h 헤더 파일을 인클루드해야 한다.
* 가변 인자는 va_list에 저장된다.
* va_start(), va_arg(), va_end() 매크로를 사용해 va_list를 제어할 수 있다.
* 고정 인자가 적어도 한 개 필요하다.
* 실제 받은 인자보다 많인 인자를 읽으려고 하면 안된다.
* 읽을 인자의 데이터형을 모두 알고 있어야 한다.
'Programming > C' 카테고리의 다른 글
[Programming/C] 동적 라이브러리 (Dynamic Library) (0) | 2020.06.18 |
---|---|
[Programming/C] 정적 라이브러리 (Static Library) (0) | 2020.06.18 |
[Programming/C] 구조체와 열거형 그리고 함수 포인터 (0) | 2020.06.18 |
[Programming/C] 리다이렉션 이용 예제 (stdout, stderr, stdin) (0) | 2020.06.17 |
[Programming/C] 포인터를 이용한 문자열 리버스 (0) | 2020.06.17 |
Comments