C 语言比较两个宏是否等价

我想判断如果一个宏定义为 X 时做操作 A,定义为 Y 时做操作 B。这样写是可以的

#define X 0
#define M X
#if M==X
    #error("Equal!");
#else
    #error("Not equal");
#endif
我知道这里有一个陷阱。这里的 MX 中,任意一个没有(通过#define)定义时,判断为 Equal。

但是这样写却不行(Visual Studio 2017)

#define X ((void*)0)
#define M X
#if M==X
    #error("Equal!");
#else
    #error("Not equal");
#endif

有没有什么办法让它可行,或者变相地实现这样的功能?

阅读 7.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏