预处理#define

时间:2011-02-16 15:40:06

标签: c c-preprocessor string-concatenation stringification

我无法理解预处理器的工作原理以及##在此特定示例中的含义

#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取代的工作或方式是什么?

2 个答案:

答案 0 :(得分:4)

“##”表示连接。因此TEMP_RIGHT = TEMP_KEY(UNKNOWN,0x1)变为TEMP_RIGHT = TEMP_UNKNOWN | 0x1,(“TEMP_”和“UNKNOWN”连接在一起)

答案 1 :(得分:2)

##是#define指令中的连接运算符。

例如,TEMP _ ## type for TEMP_KEY(UNICODE,0x1)调用会生成下一个代码:

(TEMP_UNICODE | 0x1)