源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

基于C中含有if的宏定义详解

  • 时间:2021-11-18 19:01 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:基于C中含有if的宏定义详解
含有if的宏定义 当宏定义中含有 if 时 [b]1) 定义如下宏 [/b]#define DC(p) if( foo(p) )fun(p) 用在下面的环境中 if(k>n) DC(k); else DC(n); 宏替换后,如下 if(k>n) if( foo(k) ) fun(k); else if( foo(n) ) fun( n ); 可见, 原来的 if 和 else 不再配对. [b]2) 为了避免这类问题, 我们可以将包含if语句的宏定义为一个整体. [/b]#define DC(p) {if( foo(p) ) fun(p);} 但是, 替换后变为 if(k>n) { if( foo(k) ) fun(k); };else ... 由于else前面多了个分号, 编译时会提示错误没有与else配对的if. [b]3)因为这些原因, 在宏定义中, 经常会将语句序列放入 do{...}while(0)块中. [/b]如下 #define DC(p) do{( if( foo(p) ) fun(p); }while(0) 替换后 if(k>n) do { if( foo(k) ) fun(k); }while(0); else ... 程序可以正常运行 [b]4)替换方案 a)采用 ? : 表达式 [/b]#define DC(p) ( (foo(p)) ? (fun(p)):0) [b]b)利用布尔运算的短路径求值属性 [/b]#define DC(p) ( (foo(p)) && (fun(p), 1) ) 参考书籍: <<代码阅读方法与实践>>
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部