开发者社区> 问答> 正文

书写多语句宏的最好方法是什么?

书写多语句宏的最好方法是什么?

展开
收起
游客56pszsvgthciu 2022-03-29 02:35:38 418 0
1 条回答
写回答
取消 提交回答
  • 通常的目标是书写一个象包含一个单独的函数调用语句的宏。这意味着 ``调用者" 需要提供最终的分号, 而宏体则不需要。因此宏体不能为简单 的括弧包围的复合语句, 因为如果这样, 调用的时候就会发生语法错 (明显是 一个单独语句, 但却多了一个额外的分号), 就像在 if/else 语句的 if 分支 中多了一个 else 分句一样。 所以, 传统的结局方案就是这样使用:

    #define MACRO(arg1, arg2) do {  \
    	/* declarations */      \
    	stmt1;		   \
    	stmt2;		   \
    	/* ... */	        \
    	} while(0)	/* 没有结尾的 ; */
    

    当调用者加上分号后, 宏在任何情况下都会扩展为一个单独的语句。 优化的 编译器会去掉条件为 0 的 ``无效" 测试或分支, 尽管 lint 可能会警告。

    如果宏体内的语句都是简单语句, 没有声明或循环, 那么还有一种技术, 就是写一个单独的, 用一个或多个逗号操作符分隔的表达式。

    2022-03-29 02:36:06
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
《0代码搭应用》 立即下载
不止代码 立即下载
低代码开发师(初级)实战教程 立即下载