2

##この特定の例では、プリプロセッサがどのように機能し、何を表しているのか理解できません

#include <stdio.h>

#define TEMP_KEY(type,Key) (TEMP_##type | Key)

enum TEMPKey_Type
{
    TEMP_UNKNOWN = 0,
    TEMP_SPECIAL ,
    TEMP_UNICODE
};

enum Actual_Key
{
    TEMP_RIGHT = TEMP_KEY(UNKNOWN,0x1),
    TEMP_LEFT = TEMP_KEY(SPECIAL,0x1),
    TEMP_UP = TEMP_KEY(UNICODE,0x1)
};

int main()
{
    printf("\n Value of TEMP_RIGHT : %d ",TEMP_RIGHT);
    printf("\n Value of TEMP_LEFT : %d ",TEMP_LEFT);
    printf("\n Value of TEMP_UP : %d ",TEMP_UP);

    return 0;
}

これはどのよう に機能しますか、または前処理中に#define TEMP_KEY(type,Key) (TEMP_##type | Key) どのように、そして正確に何がTEMP_##type置き換えられますか?

4

2 に答える 2

4

「##」は連結を意味します。したがって、(「 TEMP_RIGHT = TEMP_KEY(UNKNOWN,0x1)TEMP_ TEMP_RIGHT = TEMP_UNKNOWN | 0x1,」と「UNKNOWN」が結合されます)

于 2011-02-16T15:43:12.063 に答える
2

###define ディレクティブの連結演算子です。

たとえば、TEMP_KEY(UNICODE,0x1) 呼び出しの TEMP_##type は、次のコードを生成します。

(TEMP_UNICODE | 0x1)
于 2011-02-16T15:44:07.923 に答える