在C中初始化一个结构

Mal*_*vel 4 c struct init c-preprocessor

我有一个与C中的结构初始化有关的问题.我有一个结构:

struct TestStruct
{
u8 status;
u8 flag1;
u8 flag2;
};
Run Code Online (Sandbox Code Playgroud)

我想要一个泛型函数/宏来初始化这个结构并设置一个参数的值,例如status = 1,简单的方法是:

TestStruct t = {};
t.status = 1;
Run Code Online (Sandbox Code Playgroud)

但是,通过执行此操作,我将状态值设置为两次,在init函数中首先设置为0,然后将其设置为1(优化没有帮助?).
(请不要告诉我t = {1,0,0}我正在寻找一种通用方法)
我正在考虑init函数中的一个宏,例如:

#define INIT_TESTSTRUCT (param, value) \
{ .status=0, .flag1=0, .flag2=0, .param=value }
TestStruct t = INIT_TESTSTRUCT(status, 0);
Run Code Online (Sandbox Code Playgroud)

但是,编译器给出错误"初始化字段被覆盖",因为我已经设置了状态值两次.

请帮助指出如何改变宏来实现我想要的,非常感谢.

glg*_*lgl 5

#define INIT_TESTSTRUCT(param, value) \
    { .param=(value) }
TestStruct t = INIT_TESTSTRUCT(status, 0);
Run Code Online (Sandbox Code Playgroud)

应该这样做.然后将该变量添加到.data段中 - 因为它是初始化的 - 并且所有未明确提及的字段由编译器(而不是链接器或加载器)设置为0.