我是一个有用的助手,可以为您翻译文本。以下是需要翻译的内容:
我对C语言中的结构初始化有一个问题。我有一个结构体:
struct TestStruct
{
u8 status;
u8 flag1;
u8 flag2;
};
我希望有一个通用的函数/宏来初始化这个结构体并设置一个参数的值,例如 status = 1,简单的方法是:
TestStruct t = {};
t.status = 1;
然而,通过这样做,我已经两次设置了状态值,首先在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);
然而,编译器会报错“initialized field overwritten”,因为我设置了status的值两次。
请帮忙指出如何修改宏以达到我想要的效果,非常感谢。
value
应该在它周围加上()
,以防它包含混淆的内容,但在param
的情况下,这样做会适得其反。 - glglgl()
:#define TWICE(x) (2*(x))
。在这种情况下,TWICE(2 + 2)
产生(2*(2+2))
,这是可以接受的。但仅有2*x
的话,您可以使用~TWICE(2+2)
,这将得到~2*2+2
,而这更可能意味着((~2)*2)+2
,而非预期结果。 - glglgl