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
}