我正在尝试声明一个静态C结构。该结构的声明如下:
typedef struct {
int a;
int b;
int c
}dummy_struct;
但是,当定义结构时,我想在c中存储一个值,该值是使用a和b中的值以及另一个常数来计算的。
我最初的想法是用这种方式存储它:
static dummy_struct dummy =
{
.a = 5,
.b = 10,
.c = CALC_VALUE(0.5, a, b)
}
然后我将CALC_VALUE定义为预处理器,以便可以对a,b和常量值进行一些计算,如下所示:
#define CALC_VALUE(constant, a, b) (constant * (a/2) * (b*3))
但是我的编译器每次执行此操作都会抱怨,因此我使用以下方法进行声明:
static dummy_struct dummy =
{
.a = 5,
.b = 10,
.c = CALC_VALUE(0.5, 5, 10)
}
有没有一种更清洁的方法,而无需对'a'和'b'使用#defines
答案 0 :(得分:1)
使用宏生成该结构的整个初始值。
#define CALC_VALUE(constant, a_val, b_val) { \
.a = (a_val), \
.b = (b_val), \
.c = ((constant) * ((a_val)/2) * ((b_val)*3)) \
}
然后您可以做:
static dummy_struct dummy = CALC_VALUE(0.5, 5, 10);