[C] Variable argument의 사용 예
[ CnUnix ] in KIDS
글 쓴 이(By): outsider (하얀까마귀)
날 짜 (Date): 2001년 1월 9일 화요일 오후 10시 41분 52초
제 목(Title): 인수 여러개…
printf처럼 함수의 인수의 갯수를 임의로 할 수 있는 함수를 만들고 싶다면 어떻게 해야 하나요?
인수의 타입은 뭐 반복 부분에서는 한가지라고 해두지요.
[ CnUnix ] in KIDS
글 쓴 이(By): testors (테스토스)
날 짜 (Date): 2001년 1월 9일 화요일 오후 11시 23분 00초
제 목(Title): Re: 인수 여러개…
첫 인자는 꼭 있어야 합니다. 아래는 printf를 구현한 예제 입니다.. 자세한건 va 시리즈 함수군들 man 때려보시면 나옵니다.
#includevoid function(int a, ...) { va_list argptr; char str[1024]; va_start (argptr, fmt); vsprintf (str, fmt, argptr); write (1, str, strlen (str)); va_end (argptr); }
– Testors
[ CnUnix ] in KIDS
글 쓴 이(By): terzeron (the cowboy)
날 짜 (Date): 2001년 1월 10일 수요일 오후 12시 58분 43초
제 목(Title): Re: 인수 여러개…
시스템마다 조금씩 다른 것 같은데, testors님께서 말씀하신대로 va_*함수들을 사용하셔야 합니다.
구체적인 선언과 사용에 있어서 시스템을 좀 타는 것 같더군요. 일례로, elm(요즘은 잘 안 쓰지만)을 컴파일하다보면 그게 자꾸 말썽을 일으키더라구요.
매뉴얼도 각각 다르게 나오죠. man va_start와 man stdarg는 variable argument를 다른 방식으로 선언한다는 것을 보여줍니다. 실제 코드(from elm/src/curses.c)를 참조해보면 다음과 같습니다.
#ifdef I_STDARG # include#else # include #endif ... #ifdef I_STDARG Write_to_screen(char *line, int argcount, ...) { char *arg1, *arg2, *arg3; va_list vl; va_start(vl, argcount); #else Write_to_screen(line, argcount, va_alist) char *line; int argcount; va_dcl { char *arg1, *arg2, *arg3; va_list vl; va_start(vl); #endif
도움이 되었으면 좋겠네요.