gpt4 book ai didi

c - Gcc:访问和初始化结构中的 union 和位域

转载 作者:太空狗 更新时间:2023-10-29 16:11:46 24 4
gpt4 key购买 nike

我有一个由 union 、变量和位域组成的结构:

typedef struct router_client {
union {
QHsm *client;
void (*handler)(QSignal sig, QParam par);
};
uint8_t level;
struct {
uint8_t presence:2;
uint8_t is_hsm:1;
uint8_t is_handler:1;
};
} router_client_t;

初始化它的正确方法是什么?我曾经

router_client_t = {.client=(QHsm*)&qhsm_foo, level = l, \
.presence = p, .is_hsm = s, .is_handler = a}

但是当我将工具链从 Code Red MCU 工具切换到 Cross GCC 时,我开始得到

unknown field 'client' specified in initializer
unknown field 'presence' specified in initializer
...

union 的要点是我希望能够将值分配给客户端或处理程序,并让它们共享相同的指针。我尝试了一些东西,我知道我可以更改结构,但我只是想知道是否有 C99 方法来初始化和访问它。

最佳答案

这可行。我认为诀窍是结构和 union 的名称。

typedef union {
int *client;
void (*handler)(int sig, int par);
}union_t;

typedef struct {
uint8_t presence:2;
uint8_t is_hsm:1;
uint8_t is_handler:1;
}struct_t;

typedef struct router_client {
union_t test;
uint8_t level;
struct_t test2
} router_client_t;

void main()
{
int pippo;
router_client_t pippo2= {.test.client=(int*)&pippo, .level = 10, .test2.presence = 2, .test2.is_hsm = 1, .test2.is_handler = 1};
}

或者如你所写:

#include <stdint.h>

typedef struct router_client {
union{
int *client;
void (*handler)(int sig, int par);
}union_t;
uint8_t level;
struct {
uint8_t presence:2;
uint8_t is_hsm:1;
uint8_t is_handler:1;
}struct_t;
} router_client_t;

void main()
{
int pippo;
router_client_t pippo2= {.union_t.client=(int*)&pippo, .level = 10, .struct_t.presence = 2, .struct_t.is_hsm = 1, .struct_t.is_handler = 1};
}

关于c - Gcc:访问和初始化结构中的 union 和位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30071521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com