Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C静态结构声明指令_C_Struct_Preprocessor - Fatal编程技术网

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_值定义为一

我试图声明一个静态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_值定义为一个预处理器,这样我可以对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,明白了。我想这就是我试图克服的限制。