va_list에서 the number of passed parameters
을 제어하려고합니다.
va_list args;
va_start(args, fmts);
vfprintf(stdout, fmts, args);
va_end(args);
단지 va_start
후 매개 변수의 수를 얻을 가능성이 있습니까?
va_list에서 the number of passed parameters
을 제어하려고합니다.
va_list args;
va_start(args, fmts);
vfprintf(stdout, fmts, args);
va_end(args);
단지 va_start
후 매개 변수의 수를 얻을 가능성이 있습니까?
당신이 원하지 정확하게,하지만 당신은
#include <stdio.h>
#include <stdarg.h>
#define NARGS_SEQ(_1,_2,_3,_4,_5,_6,_7,_8,N,...) N
#define NARGS(...) NARGS_SEQ(__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1)
#define fn(...) fnexec(NARGS(__VA_ARGS__) - 1, __VA_ARGS__)
static void fnexec(int n, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
printf("%d params received\n", n);
vprintf(fmt, args);
va_end(args);
}
int main(void)
{
fn("%s %d %f\n", "Hello", 7, 5.1);
return 0;
}
직접 계산할 수 없습니다. 예 printf
들어
은 다음 인수를 계산하는 첫 번째 파라미터를 사용하여 가변 개수의 함수이다 : 제 printf
는 첫 번째 인자 ("%s %i %d"
)를 파싱
printf("%s %i %d", ...);
기능 및 3 개 개의 인수가 다음 추정한다.
귀하의 경우, fmts
을 구문 분석하고 %
- 추출기를 추출한 다음 다른 인수를 추정해야합니다. 사실 각 %[flags][width][.precision][length]specifier
은 인수로 간주 될 수 있습니다. read more...
정확히하고 싶은 것은 printf (% s % s)가있는 경우에 printf와 같은 함수를 만드는 것입니다. 두 번째 % s는 어떤 인수와도 일치하지 않기 때문에 하나의 매개 변수 만 문제가됩니다. 우리는 출력 bizzard 캐랙터에서 찾을 것입니다 ... – Aymanadou
당신은 그 실수를 피할 수 없으며,'printf' 자체가 호출자에게 인자를 전달하도록 강요 할 수 없습니다 지정자와 동일합니다. – deepmax
예를 들어,'printf ("% i % i", 12);를 쓸 수 있습니다. '틀렸지 만 가능하면 – deepmax
이 아니, 거기 아니다 PARAMS 계산이 매크로를 사용할 수 있습니다. –
아니, 내가 아는 한. 첫 번째 인수로 번호를 전달하기 만하면됩니다. – nhahtdh
직접 계산해야합니다. 또는 [this] (http://stackoverflow.com/questions/4421681/how-to-count-the-number-of-arguments-passed-to-function-that-accepts-a-variabl)을 확인하십시오. – Gandras