我有一个关于用解引用运算符粘贴预处理器的问题。有人能告诉我为什么下面的代码不能编译吗?

typedef struct
{
    char data;
} MY_STRUCT;

MY_STRUCT  My_Instance;
MY_STRUCT* My_PInstance;

#if 1
#define GET_MEMBER(membername)         (My_PInstance->##membername)
#else
#define GET_MEMBER(membername)         (My_Instance.##membername)
#endif

后来我打电话来:
char value = GET_MEMBER(data);  // Where My_PInstance is properly instantiated.

我得到一个编译错误。
error: pasting "->" and "data" does not give a valid preprocessing token

最佳答案

你不需要粘贴。
只需(My_Pinstance->membername)
“35;”应将两个令牌粘贴到一个有效令牌中。然而
->foo不是有效的令牌。(例如foo)

08-04 20:56