C静态结构声明指令
我试图声明一个静态C结构。结构的声明如下所示:C静态结构声明指令,c,struct,preprocessor,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_值定义为一
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_值定义为一个预处理器,这样我可以对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'和'b'使用宏生成结构的整个初始值
#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);
为什么不将
0.5
存储在结构中,然后在需要值的地方进行计算呢?结构成员不是变量,如果不引用包含结构的变量,则无法访问这些变量。在初始化静态变量时,只能使用文字和常量表达式。@JosephSible。问题不在于存储0.5,而是能够从结构声明中访问a和b中的值。我不介意为0.5使用a#define,但我希望能够访问a和b,因为它们都已为结构成员定义。所以我想知道是否有一种方法可以访问本地成员中存储的值。如果你看一下我的第二段代码,我希望能够做类似的事情。@Barmar Ok,明白了。我想这就是我试图克服的限制。