gpt4 book ai didi

c - 静态初始化的结构自引用

转载 作者:太空狗 更新时间:2023-10-29 15:49:21 25 4
gpt4 key购买 nike

我有一个简单的结构,定义如下:

typedef struct { 
int index;
double* arrayToRead;
} my_struct;

我想初始化一个结构数组,使它们变成这样:

double decimals[2] = {1.0, 2.0};

my_struct[2] = {
{0, &decimals[0]},
{1, &decimals[1]}
};

我必须静态初始化这个结构数组。

我可以在引用以前定义的成员时静态初始化它吗,如下所示:

my_struct[2] = {
{0, &decimals[index]},
{1, &decimals[index]}
};

其中“索引”是指定义在“小数”左侧的索引值?

最佳答案

如果你有现代 C 编译器(又名 C99),你可以使用 P99用于代码展开。有点像

#define INIT_ELEMENT(NAME, X, I) [I] = { \
.index = I, \
.arraytoread = &decimals[I] \
}
#define INIT_ELEMENTS(N) P99_FOR(, N, P00_SEQ, INIT_ELEMENT, P99_DUPL(N,))

然后

my_struct A[] = { INIT_ELEMENTS(2) };

应该扩展为您喜欢的初始值设定项。

(这里第一个宏定义了要重复的代码,仅使用其参数中的 I,即调用的索引。在第二个宏中,P00_SEQ 表示这是用逗号分隔的。)

关于c - 静态初始化的结构自引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8159494/

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