首页 > 解决方案 > C 静态结构声明指令

问题描述

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

有没有更简洁的方法来做到这一点而不使用#defines for 'a' and 'b'

标签: cstructpreprocessor

解决方案


使用宏来生成结构的整个初始值。

#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);

推荐阅读