下载此文档

宏替换只作替换,不做计算,不做表格达式求解,不做类型检查….doc


文档分类:办公文档 | 页数:约3页 举报非法文档有奖
1/3
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/3 下载此文档
文档列表 文档介绍
宏替换只作替换,不做计算,不做表达式求解,不做类型检查…可以用#undef命令终止宏定义的作用域。宏定义可以嵌套,最多替换200+次(具体记不清了)。防止文件重复包含#ifndefXXX_H_#defineXXX_H_…#endif编译过程控制#ifdef_DEBUG…#else…#endif定义常量##definemax(a,b)((a)>(b)?(a):(b))包含多个语句的宏#definemsg(str)do\{\…;\…;\}while(0)#和##的用法宏替换会把#后面的内容作为字符串进行替换,例子:#definePASTE(n)"abc"#n替换之后相当于”abc””n”比如PASTE(12)->“abc12”##用于把两侧的参数合并成一个符号,例子: #posite(a,b,c)a##b##posite(12,12,11)->posite(“aa”,”bb”,”cc”)->“”注意:当宏参数是另一个宏的时候,会递归展开,但用'#'或'##'的(该)宏参数不会再展开。#和###wo2#definemuli(a,b)((a)*(b))则muli(two,two)的参数two会被递归展开结果为((2)*(2))#或###wo2#definemuli_(a,b)a##*##b则muli(two,two)的参数two不会被展开结果为two*two如果想让她展开只需要多加一层间接转换宏#wo2#definemuli_(a,b)a##*##b#definemuli(a,b)muli_(a,b)结果为2*2再看一个例子:#wo2#hree(a)#a#definemuli(a,b)three(a)#b则muli(two,two)结果为2tow也就是说,含有#或##的该宏定义参数不会被继续替换,其他的宏参数还会递归替换。看看下面我们代码中调试信息的宏很容易理解了吧:)#defineM_STR1(s)#s#defineM_STR2(s)M_STR1(s)#defineM_SHOWMSG(desc)message(__FILE__"("M_STR2(__LINE__)"):"#desc)注:#defineoffsetof(s,m)((size_t)sizeof(((s*)0)->m))例子:(四字节对齐情况下)typedefstructKK{ longk; charc;}T_KK;ount{ inti; intj; T_KKk[2]; unsignedintl;}Account;offsetof(Account,l)等于24offsetof(Account,k[1].c)等于20注:sutter还是mayers说这是最著名的宏?(记性太差:(又忘了),不过现在这个宏已经纳入ANSIC,。结构定义可以任意嵌套,但结构定义中不可以含有位域。也适用于union结构。常见的宏定义错误用法:#definemax(a,b)(a>b?a:b)//参数缺少括号#defineprint(msg)if(…)printf(“%s\n”,msg);//语句应使用do{..}while(0)#defineprint(a,b){printf(“%s”

宏替换只作替换,不做计算,不做表格达式求解,不做类型检查… 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数3
  • 收藏数0 收藏
  • 顶次数0
  • 上传人rita291961
  • 文件大小25 KB
  • 时间2019-03-18
最近更新