如何使用一个宏的值作为参数传递给另一个宏?
2017-05-11 17:31
465 查看
// 宏中的#号是字符串化的意思,就是说把宏参数看成一个字符串。 // 但是考虑另一种需求:我们要字符串化的参数很长,我们想用另外一个宏代替这个参数。 // 这样的话,你字符串化会有问题, // 字符串化的是另一个宏的名字,而不是宏的值。 // 这就出现了本篇要讨论的问题:如何使用一个宏的值作为参数传递给另一个宏? // 方法就是:宏传参给宏,具体的解释看代码注释。 #include <stdio.h> int main(int argc, char *argv[]) { #define WARN_IF(EXPR) \ do \ { \ if (EXPR) \ fprintf(stderr, "Warning: " #EXPR "\n"); \ } while(0) int divider = 0; WARN_IF(divider == 0); #define CHR \xe2\x97\x8f #define PASSWD(x) #x#x#x#x#x#x #define MASK(str) PASSWD(str) // 你本以为定义2个宏就能完成的功能,PASSWD(CHR),但是并不能完成。 // 那你就再定义一个解释参数的宏,这样就ok了。 // 传给MASK的参数是CHR,但是PASSWD调用的却是CHR的值。 // 因为宏CHR被展开了。 // 这就叫宏传参给宏。 printf("passwd:%s\n", MASK(CHR)); return 0; }
相关文章推荐
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- PHP跳转到另一个画面,并且带着该行内的一个数值作为参数传递给下一个页面.能给例子吗
- asp.net frameset里一个frame中获取下拉框、单选框的值并作为参数传递到另一个frame里并显示结果
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- 安卓入门 使用android创建一个项目 从启动activity中响应按钮事件 启动另一个activity 并传递参数
- C#.NET常见问题(FAQ)-如何把函数名作为参数传递给另一个函数
- jmeter如何将上一个请求的结果作为下一个请求的参数——使用正则提取器
- 如何将url作为一个参数放到另一个url中
- xargs可以将一个命令的输出作为另一个命令的参数——参看实例的使用
- jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器
- C#.NET常见问题(FAQ)-如何把函数名作为参数传递给另一个函数
- JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器
- jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器
- JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器
- JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器
- lambda的常见用法:传递一个函数的结果作为另一个函数的参数
- jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器