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