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_LASTevent_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でstrcuts配列をtypedefする方法は?

定義する方法はすでにあなたの質問に示されています、なぜ以下を参照してください:-

typedef名が可変長配列タイプを示す場合、配列の長さは、typedef名が使用されるたびではなく、定義されたときに固定されます。

DriverEventMaskを表す

DriverEventMaskはstructevent_paramを表します

なぜあるのか sizeof(struct event_param)

そのため、SV_DRIVER_EVENTS_MASK_SIZEはstructevent_paramのサイズを表します。この構造体にはビットフィールドが含まれており、パディングを回避するコンパイラ指令があるかどうかがわかるまで、その配置方法はわかりません。

于 2012-08-30T08:46:11.647 に答える