0

我有以下代码,它工作正常并且已经使用了很长时间......但我不知道它是什么意思。

struct event_param
{
    int task:3;
    int param1;
    int param2;
};

#define SV_DRIVER_EVENTS_MASK_SIZE (SV_DRIVER_EVENT_LAST*sizeof(struct event_param))
typedef struct event_param driver_event_mask[SV_DRIVER_EVENTS_MASK_SIZE];
typedef driver_event_mask DriverEventMask;
  • 代表什么driver_event_mask
  • 为什么sizeof(struct event_param)在数组里面?
4

2 回答 2

1

:3事物代表一个域。不过,我不确定这很重要,因为sizeof(struct event_param)我认为仍然几乎可以肯定是 12 个字节。

所以这里发生的是创建了一个SV_DRIVER_EVENT_LAST结构event_param数组。但我也希望sizeof(struct event_param)这里没有必要 - 数组的长度是根据它包含的单位数定义的,而不是字节数。

1. driver_event_mask就是它所说的。表示 SV_DRIVER_EVENTS_MASK_SIZE 结构 event_param 项数组的类型。

2. sizeof(struct event_param)这里不需要,但不会造成伤害(即不会导致错误),因为它只是意味着您分配的内存大约是实际需要的 12 倍。

于 2012-08-30T08:34:37.817 回答
-2

如何在 c 中 typedef strcuts 数组?

您的问题中已经显示了如何定义,为什么请参考以下内容:-

如果 typedef 名称表示可变长度数组类型,则数组的长度在定义 typedef 名称时是固定的,而不是每次使用时:

DriverEventMask代表什么

DriverEventMask 表示 struct event_param

为什么有 sizeof(struct event_param)

这样 SV_DRIVER_EVENTS_MASK_SIZE 将代表 struct event_param 的大小。这个结构包含位字段,并且在我们知道是否有任何编译器指令可以避免填充之前,它的排列方式是不确定的。

于 2012-08-30T08:46:11.647 回答