이 어떻게 든 이미 이루어집니다 예를 들어 printf()
같은 메커니즘을 가지고있다 내가 발신자
에 의해 전달 된 매개 변수의 var_argument 기능 내부의 sprintf을하고 싶은 말은. 변수 인수 함수의 경우 변수 매개 변수의 일부가 아닌 첫 번째 매개 변수가 필요합니다. 서식 문자열로 사용하여 x 위치의 위치를 n으로 결정하십시오.
첫 번째 매개 변수는 필수 항목이므로 필수 매개 변수가 있어야하며 변수 인수에 무엇을 나타낼 지 표시기로 사용하는 것이 자연스럽게 보입니다.
는, 예를 들어이 걸릴 물론
#include <stdio.h>
#include <stdarg.h>
int
variable(const char *format, ...)
{
va_list args;
int count;
va_start(args, format);
count = 0;
while (*format != '\0') {
switch (*format++) {
case 's':
fprintf(stdout, "arg[%d]: %s\n", count, va_arg(args, const char *));
break;
case 'd':
fprintf(stdout, "arg[%d]: %d\n", count, va_arg(args, int));
break;
case 'f':
fprintf(stdout, "arg[%d]: %f\n", count, va_arg(args, double));
break;
}
count += 1;
}
va_end(args);
return 0;
}
int
main(void)
{
variable("sdf", "Example", 3, 3.1416);
}
, 지정자와 인수의 실제 유형 사이에 불일치가 정의되지 않은 동작과 바람직하지 않은 행동에 대한 논리적 인 결과로 이어질 것입니다. 따라서 매우 신중해야하거나 printf()
스타일 지정자를 사용하고 이러한 불일치가 발생하면 경고하도록 컴파일러에 지시해야합니다.
또 다른 해결책은 glib 님의 기능처럼 유형 지정자를 전달하고 매개 변수의 끝을 나타내는 마지막 값을 매개 변수 바로 뒤에 전달하는 것입니다. 매개 변수 "지정자"는()`의 printf`에 대해 알고 계십니까이
#include <stdio.h>
#include <stdarg.h>
enum types {
String, Integer, Double, Float = Double, /* unless you want to store the value in a poitner
* there is normally no difference between these
*/
End
};
int
variable(enum types type, ...)
{
va_list args;
int count;
va_start(args, type);
count = 0;
while (type != End) {
switch (type) {
case String:
fprintf(stdout, "arg[%d]: %s\n", count, va_arg(args, const char *));
break;
case Integer:
fprintf(stdout, "arg[%d]: %d\n", count, va_arg(args, int));
break;
case Double:
fprintf(stdout, "arg[%d]: %f\n", count, va_arg(args, double));
break;
default:
fprintf(stderr, "unknown type specifier\n");
break;
}
type = va_arg(args, enum types);
count += 1;
}
va_end(args);
return 0;
}
int
main(void)
{
variable(String, "Example", Integer, 3, Double, 3.1416, End);
}
같은 모든 지원되는 유형을 열거
enum
을 수 있을까? –인수의 유형을 제공하려면 다른 매개 변수가 필요합니다. 이는 유일한 (휴대용) 방법입니다. ('% d','% f', ...) 형식의 형식을 추론하는'printf'와 같습니다. – Holt
'...'앞에 오는 인수는 전통적으로 유형을 나타내며 크기는 그 것으로부터 추론됩니다. –