4

このマクロは、特定のフィールドが無効になっているかどうか(0または1)を見つけるために、コードベースの多くの場所に表示されています。

#define assert_disabled(e)      ((void)sizeof(e))

sizeofここで、フィールドが0か1かを見つけるのにどのように役立ちますか?

誰かが実際の例でこれを説明できますか?

4

2 に答える 2

8

このマクロは、アサーションがオフになっているときに使用されているだけだと確信しています。((void)sizeof(e))just または similar の代わりに使用するトリック(void)0は巧妙です: 評価はe(ほとんど) 回避されますが、有効な式であるコンパイラ チェックが引き続きe行われるため、定義を変更してアサーションをオンにしても、予期せぬコンパイル エラーが発生することはありません。

于 2012-10-21T18:50:56.203 に答える
2

これは、Linux カーネル コードで見た一種の黒魔術です。

コンパイル時に式「e」をチェックするために使用されます。

于 2012-10-21T18:51:39.077 に答える