C静态结构声明指令

时间:2020-10-13 18:41:36

标签: c struct preprocessor

我正在尝试声明一个静态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

1 个答案:

答案 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);