今天想在宏名中使用宏,如#define macroname##postfix,但是发现不行,好像c语言的宏没法弄出这种效果吧。暂时放一下,不琢磨了。
c语言预处理命令详解
http://www.360doc.com/content/15/0114/22/9200790_440805135.shtml
c语言宏
https://wenku.baidu.com/view/efd65365783e0912a3162a04.html
使用这么一个规则,可以创建一个很有趣的技术:打印出一个宏被展开后的样子,这样可以
方便你分析代码:
#define TO_STRING( x ) TO_STRING1( x )
#define TO_STRING1( x ) #x
TO_STRING
首先会将x全部展开(如果x也是一个宏的话),然后再传给TO_STRING1转换为字符串,现在你可以这样:
const char *str = TO_STRING( PARAM( ADDPARAM( 1 ) ) );
去一探PARAM展开后的样子
使用这么一个规则,可以创建一个很有趣的技术:打印出一个宏被展开后的样子,这样可以方便你分析代码:#define TO_STRING( x ) TO_STRING1( x ) #define TO_STRING1( x ) #x
TO_STRING首先会将x全部展开(如果x也是一个宏的话),然后再传给TO_STRING1转换为字符串,现在你可以这样:
const char *str = TO_STRING( PARAM( ADDPARAM( 1 ) ) );去一探PARAM展开后的样子。
一个很重要的补充:就像我在第一点说的那样,如果一个像函数的宏在使用时没有出现括号,那么预处理器只是
将这个宏作为一般的符号处理(那就是不处理)
C语言常用宏定义
https://wenku.baidu.com/view/258f0463caaedd3383c4d30e.html?re=view
c语言宏的高级应用
https://wenku.baidu.com/view/c95888ce05087632311212f5.html
C语言宏嵌套
http://blog.163.com/m13591120447_1/blog/static/21637918920137811837285/C语言宏高级用法 [总结]
http://www.cnblogs.com/Anker/p/3418792.html