2

私は光沢のソースコードを調べていて、マクロ定義で立ち往生していました:

#define ldlm_namespace_proc_unregister(ns)      ({;})  
#define ldlm_namespace_proc_register(ns)        ({0;})

ファイルで定義されていますlustre/ldlm/ldlm_resource.c
このマクロ定義は何を意味しますか?

4

2 に答える 2

4

マクロは、プレーン テキストの置き換えです。このマクロは、コードの一部ldlm_namespace_proc_register(x)が に変換されることを意味し({0;})ます。それ以上でもそれ以下でもありません。

コードの意味についても疑問に思っている場合({;})({0;})これらはGCC 式ステートメントです。

そのドキュメントによると、({0;})は とまったく同じ0であり({;})、 型の式voidです。


憶測は次のとおりです: これらのマクロの目的は、ライブラリのユーザーが次のようなコードを記述できるようにすることである可能性があります。

int result = ldlm_namespace_proc_register(x);
// ...
ldlm_namespace_proc_unregister(x);

また、コンパイラのスイッチやその他の構成によっては、このコードが実際に関数を呼び出すか、行が有効になっている場合は実際には何もしない可能性があります。

于 2015-11-24T04:55:20.883 に答える