このマクロは、特定のフィールドが無効になっているかどうか(0または1)を見つけるために、コードベースの多くの場所に表示されています。
#define assert_disabled(e) ((void)sizeof(e))
sizeof
ここで、フィールドが0か1かを見つけるのにどのように役立ちますか?
誰かが実際の例でこれを説明できますか?
このマクロは、アサーションがオフになっているときに使用されているだけだと確信しています。((void)sizeof(e))
just または similar の代わりに使用するトリック(void)0
は巧妙です: 評価はe
(ほとんど) 回避されますが、有効な式であるコンパイラ チェックが引き続きe
行われるため、定義を変更してアサーションをオンにしても、予期せぬコンパイル エラーが発生することはありません。
これは、Linux カーネル コードで見た一種の黒魔術です。
コンパイル時に式「e」をチェックするために使用されます。