由一段宏定义代码开始:
|
|
宏定义字符串拼接
- 临近字符串自动拼接
- “aaaaaaa””bbbbbb””cccccc”会被自动合成:”aaaaaaabbbbbbcccccc”
多参数处理
C C++带多个参数的宏(…与VA_ARGS详解)
- 环境
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
2.’…’与VA_ARGS
这里的…代表多个参数,在宏展开时,编译器会经…的参数替换VA_ARGS
例1:main.c文件敲入如下代码
|
|
使用预编译命令gcc -E main.c -o main.i
看看展开后是什么效果:
|
|
3. 多参数别名
__VA_ARGS__
这个名字似乎很难写,gcc支持另一种更加人性化的写法:
例2:
|
|
展开后效果跟第一种写法是一样的:
|
|
4. 空参数与##
前面两个例子都传入了两个参数,如果…没有传进参数会发生什么事情呢:
|
|
展开后:
|
|
可以看到Hello world后面带来一个,
这个时候就会导致编译出错。##的出现就是为了解决这个问题:
当…没有传进参数时,预编译器会将最后面的,删除
|
|
展开后效果:
|
|