Linuxカーネルコードで使用されている構文について疑問があります。私はそれが何をするのか直感を持っていますが、もっと正式に知りたいです。カーネルを使用していますv3.5.4
ファイル/include/linux/sched.hでは、以下が定義されています
struct task_struct {
    volatile long state;
    //some more data members
};
ファイル/include/linux/init_task.hファイルでは、以下が定義されています。
#define INIT_TASK(tsk) {
    .state     = 0,               \
    //some more initializations
}
私は2つのことについて混乱しています:
a)初期化に使用されているように感じますが、構造体のこのタイプの初期化について、誰かが良い読み物を提案できますか。
b)次の初期化がどのように機能するのかわかりません。#defineこれと対応するtask_struct構造が   どのように関連しているかのように。
[編集]私は次のことにも気づきました:c)\必要なすべての行の終わりにあります。
d)カーネルdoeの多くの部分がにラップされてい#ifdef #endifます。ラップされたデータメンバーを初期化する場合は、#ifdef #endifこの形式の初期化を使用できますか。つまり、このよう#ifdef #endifに内部で使用できますかINIT_TASK()
#define INIT_TASK(tsk) {
    .state     = 0,               \
    //some more initializations
    #ifdef CX 
    .tickets   = 5,               \
    #endif
}