私は光沢のソースコードを調べていて、マクロ定義で立ち往生していました:
#define ldlm_namespace_proc_unregister(ns) ({;})
#define ldlm_namespace_proc_register(ns) ({0;})
ファイルで定義されていますlustre/ldlm/ldlm_resource.c
。
このマクロ定義は何を意味しますか?
マクロは、プレーン テキストの置き換えです。このマクロは、コードの一部ldlm_namespace_proc_register(x)
が に変換されることを意味し({0;})
ます。それ以上でもそれ以下でもありません。
コードの意味についても疑問に思っている場合({;})
、({0;})
これらはGCC 式ステートメントです。
そのドキュメントによると、({0;})
は とまったく同じ0
であり({;})
、 型の式void
です。
憶測は次のとおりです: これらのマクロの目的は、ライブラリのユーザーが次のようなコードを記述できるようにすることである可能性があります。
int result = ldlm_namespace_proc_register(x);
// ...
ldlm_namespace_proc_unregister(x);
また、コンパイラのスイッチやその他の構成によっては、このコードが実際に関数を呼び出すか、行が有効になっている場合は実際には何もしない可能性があります。