#define的一些高级用法

1.两个参数宏定义

#define SUM(x, y) (x + y)

// 调用
int a = SUM(10, 5);

2.多个参数宏定义

#define Array(FIRST, ...) [NSArray arrayWithObjects:FIRST, ##__VA_ARGS__, nil]
// 其中 ##__VA_ARGS__ 用于表示省略号所代表的所有内容

3.#符号和##符号

// # 算符可产生一个 C-语言 格式的字符串
#define string(x) #x //则 string(testing) == "testing"
//## 算符用来连接两段字符串。假设你有一组变量,x1 到 x100。如果你想打印其中某一个变量的值。你可以这样定义:
#define printxvar(n) printf("%i\n", x ## n)

由此, printxvar(20); 在编译时将被识别为 printf(“%i\n”, x20);。这样只需要输入 printxvar(n);便可以打印出 xn 的值。

其实,##最常用的用途还是上面介绍的 ##__VA_ARGS__,它可用来抓取省略号所代表的所有内容。

posted @ 2016-10-20 11:03  fudo  阅读(478)  评论(0)    收藏  举报