リナックスのはじめの方のコードでつまずきました。
以下のような三行のコードがありました。。。順番は不問です。
#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
struct boot_params boot_params __attribute__((aligned(16)));
BUILD_BUG_ON(sizeof boot_params != 4096);
上はマクロ、真ん中は構造体?、下は実際の使用だと思います。
マクロの使い方の*!!
の部分の意味がわかりません。
真ん中の構造体は()
が使われている理由がわかりません。そして、aligned
が何なのか解決できません。
そのため一番下の結果が予測できません。
ファイルは、/linux-4.5.1/arch/x86/boot
内にあるものです。