遇到过如下代码:
// 情况一: #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。