宏定义中#与##

遇到过如下代码:

// 情况一:
#define __xstr(s) __str(s)
#define __str(s) #s
// 情况二
#define __xstr(s) #s
NSLog(@"%s", __xstr(INT_MAX));
// 情况一运行结果:2147483647
// 情况二运行结果:INT_MAX

原因是在宏定义中的#与##不会再展开。

展开:

1、

#define  INTMAX  2

#define  _xstr(s)   _str(s)

#define  _str(s)    #s

用到_xstr(INT_MAX),会转换为_xstr(2)。

其实可以用 #define _xstr(s)  s替换,只是情况一结果是字符串形式,而#define _xstr(s)  s的结果是整形形式。

2、

#define _xstr(s)   _str(s)

用到_xstr(INTMAX),会转换为_xstr(INTMAX)。

不展开:

#define  INTMAX  2

#define _xstr(s)   #s

用到_xstr(INTMAX),只会转换为INTMAX。

原文地址:https://www.cnblogs.com/zhouyi-ios/p/5124587.html