私は、このコードの意味はこれだと信じています。場所HCI_SUPP_LE_STATES_NON_CONN_ADV_MASKで
非接続可能広告主の状態は、その 構造はパラメータxとユーザ によって与えられることアレイのオフセットHCI_SUPP_LE_STATES_NON_CONN_ADV_OFFよりも がサポートされている場合(HCI_LE_STATES_NON_CONN_ADV_SUPPORTED(X)) ビットとなり値1 それ以外の場合、このビットは値0となります。
類似した(しかし同一ではない)プロセッサーバージョンを持つDSPおよび他のプロセッサーでは、ハードウェアの違いは、一般的に以下の例のようにマクロで表現されます。意図的に異なるオフセットと異なるマスクを異なるプロセッサに設定しています。
もっと珍しいのは、異なるタイプの配列でマクロを「呼び出す」かもしれません。 以下の例では、TYPE1が定義されている場合、long整数のマクロ配列を引数として「呼び出す」よりも大きな値になります。 TYPE2が定義されている場合は、短い整数の配列を引数としてマクロを呼び出します。
どちらのメソッドも、マクロを一種のプリミティブだが高速な仮想関数として実装します。
//#define PROCESSOR1 or PROCESSOR2
//#define TYPE1 or TYPE2
#ifdef PROCESSOR1
#define HCI_SUPP_LE_STATES_NON_CONN_ADV_MASK 0x04
#define HCI_SUPP_LE_STATES_NON_CONN_ADV_OFF 2
#define HCI_LE_STATES_NON_CONN_ADV_SUPPORTED(x) ((x)\
[HCI_SUPP_LE_STATES_NON_CONN_ADV_OFF]\
& HCI_SUPP_LE_STATES_NON_CONN_ADV_MASK)
#elif defined(PROCESSOR2)
#define HCI_SUPP_LE_STATES_NON_CONN_ADV_MASK 0x01
#define HCI_SUPP_LE_STATES_NON_CONN_ADV_OFF 0
#define HCI_LE_STATES_NON_CONN_ADV_SUPPORTED(x) ((x)\
[HCI_SUPP_LE_STATES_NON_CONN_ADV_OFF]\
& HCI_SUPP_LE_STATES_NON_CONN_ADV_MASK)
#endif
#ifdef TYPE1
long Arr[4] = {1,2,3,4};
#elif defined(TYPE2)
short Arr[4] = {1,2,3,4};
#endif
int f()
{
return(HCI_LE_STATES_NON_CONN_ADV_SUPPORTED(Arr));
}
xは引数です。それはマクロです。本質的にコンパイル時の "関数"です。どこでもHCI_LE_STATES_NON_CONN_ADV_SUPPORTED(somevalue) 'があれば、そのマクロ/関数の戻り値はコンパイルされたバイナリに入れられます。 –
*引数*として指定した配列の特定の要素のビット単位の論理積で、特定の値を持ちます。要素インデックスと 'AND'オペランドは最初の2つの' #define'で定義されています。 '(x)[0]&1)' –
'(x)'は括弧で囲まれているため、式xの一部として渡された修飾子が索引付けよりも優先されます。 –