gpt4 book ai didi

c - 使用带有数组参数的宏在 C 中初始化结构数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:50 24 4
gpt4 key购买 nike

我正在尝试使用宏来初始化结构数组的所有数组参数,其中一个参数是数组。

我的结构是

typedef struct
{
int size_parts;
int *parts;
int width;
int length;
} parts_struct;

我的宏定义为

#define SET_ARRAY_INPUT(_width, _length, ...) {width:_width, length:_length, parts:{__VA_ARGS__}, size_parts:(sizeof((int[]){__VA_ARGS__})/sizeof(int))}

我的数组初始化为

static parts_struct parts[] = {
SET_ARRAY_INPUT(2, 3, 9354, 39458, 3294),
SET_ARRAY_INPUT(4, 2, 9354, 3294)
}

然而,这总是失败,我不断收到错误“错误:类型的标量初始值设定项周围的大括号”。任何帮助将不胜感激。

最佳答案

在标准 C(C99 或 C11)中,结构中指定的初始值设定项以 . 开头,并使用 = 而不是 :。你可能会设法让这样的东西工作:

#define SET_ARRAY_INPUT(_width, _length, ...) \
{ .width = (_width), .length = (_length), \
.parts = (int []){__VA_ARGS__}, \
.size_parts = (sizeof((int[]){__VA_ARGS__})/sizeof(int))}

请注意 Designated Initializers 上的 GCC 手册页状态:

Another syntax that has the same meaning, obsolete since GCC 2.5, is fieldname:, as shown here:

struct point p = { y: yvalue, x: xvalue };

因此下面显示的替代定义确实有效(令我相当惊讶)但它是一个 GCC 扩展,已经正式废弃了很长时间(GCC releases 页面说 GCC 2.5.0 于 1993 年发布- 10-22;GCC 2.5.8 于 1994-01-24 发布;GCC 2.6.0 于 1994-07-14 发布)——不应在新代码或翻新代码中使用:

#define SET_ARRAY_INPUT(_width, _length, ...) \
{ width: (_width), length: (_length), \
parts: (int []){__VA_ARGS__}, \
size_parts: (sizeof((int[]){__VA_ARGS__})/sizeof(int))}

关于c - 使用带有数组参数的宏在 C 中初始化结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49925115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com