Linux Device Drivers 3rd Edition book をオンラインで読んでいますが、アトミック変数の初期化マクロを理解するのに問題があります。
static atomic_t foobar = ATOMIC_INIT(1);
Linux カーネル v3.2のソース コードを調べましたが、次の2 つの定義しか思いつきませんでした。
#define ATOMIC_INIT(i) { (i) }
と
#define ATOMIC_INIT(i) ((atomic_t) { (i) })
マクロの定義の 2 番目のバージョンは、機能的には最初のものと同じようですatomic_t
。定義に 2 つのバージョンがあるのはなぜですか?
マクロの目的は、Linux カーネルの将来のリリースで構造が変更されたATOMIC_INIT
場合にコードが壊れないようにすることだけですか?atomic_t