我想用varargs填充整个结构。我知道这个结构的所有单个元素都可以用 int16_t *x = va_arg(args, int16_t*);
但我正在寻找一个更有效的方法,以便我可以使用 memset
. 我试图对整个结构使用相同的代码,如下图所示。但这并不奏效。那么有没有一种方法,可以只用一个 va_args
参数,而不是所有单个元素的varargs。
typedef struct {
int16_t x;
int16_t y;
} Coordinate;
void AddValues(int count, ...) {
va_list args;
va_start(args, count);
Coordinate *dec = va_arg(args, Coordinate*);
*dec.x = 10;
*dec.y = 5;
va_end(args);
}
int main() {
Coordinate cor;
AddValues(2, &cor);
printf("x: %d and y: %d\n", cor.x, cor.y);
}
va_arg(args, Coordinate)
应该是 va_arg(args, Coordinate *)
.
您可以将整个结构用 复数字面:
*va_arg(args, Coordinate *) = (Coordinate) { 10, 5 };
void main()
应该是 int main(void)
.
完全可以合法地使用结构类型的 va_arg
宏。要求是
参数类型应为 类型 指定的名称,这样,指向具有指定类型的对象的指针的类型可以通过简单的后缀来获得。
*
到 类型.
调用 va_arg
属于这种类型。不 类型的指针。你将一个类型为 Coordinate
到 dec
属于 Coordinate*
. 修正这一点,并相应地调整其余的代码,你应该能够使它工作。
另外。
void main()
是不正确的。使用 int main(void)
.
您的问题中的代码至少缺少三个必要的 #include
指令。
您的代码定义了 AddValues
却叫 AddValuesOriginal
.
如果你告诉我们 "但这并不工作。",你需要告诉我们确切的 如何 它不工作。在你的问题中包含任何错误信息,格式为代码。