#define do{…}while(0)形式的意义,转载)

技术#define do{…}while(0)形式的意义,转载) #define do{…}while(0)形式的意义(转载)#define do{…}while(0)这种奇怪形式的宏定义经

形式# definedo {的含义.} while (0)(转载)

# #定义.}while(0 (0),一种奇怪的宏定义形式,在实际项目中经常使用,其意义如下:

1. 增加代码的适应性

以下宏定义不使用do{.}while(0 (0)

#定义FOO(x)FOO(x);bar(x);

有了这个宏定义,单独调用就不会有问题了,例如:

FOO(100)

宏扩展为:

foo(x);bar(x);

这样调用FOO没有问题,但是FOO(x)不能放入控制语句中,例如:

如果(条件)

FOO(x);

其他

.

在宏观扩张之后,它变成了

如果(条件)

foo(x);bar(x);

其他

.

这就导致了语法错误,这个语法错误并不可怕,它可以在编译阶段被发现,甚至更致命的是,它可能导致逻辑错误,的哪个编译器都找不到。当这个问题出现时,程序员会发疯。示例:

如果(条件)

FOO(x);

该代码已扩展为:

如果(条件)

foo(x);bar(x);

这样,无论条件是真还是假,bar(x)都会被调用。你遭受过这个兄弟的折磨吗?

这时,do的值{.}而(0)被反射。修改FOO的定义。

# define FOO(x)do { FOO(x);bar(x);} while (0)

这样,可以毫无问题地将FOO放入控制语句中。

也许有人说:放foo(x);Bar(x)你不能用大括号把它括起来吗?例如,这样定义它:

#定义FOO(x){ FOO(x);bar(x);}

请看下面的代码:

如果(条件)

FOO(x);

其他

.

膨胀后:

如果(条件)

{ foo(x);bar(x);} ;//注意最后一个分号。语法错误。

其他

.

语法错误是一样的;

2.增加代码的扩展性

我理解可扩展性主要是因为在宏定义中可以引用其他宏,例如:

# define FOO(x)do { OTHER _ FOO(x)} while(0)

这样我们就不用担心OTHER_FOO是不是,但是语句还是符合语句的,不会有问题。

3.增加代码的灵活性

灵活性主要体现在我们可以从宏观上进行突破,比如以下定义:

#定义FOO(x) do{ \

foo(x);\

if(条件(x)) \

打破;\

条形(x) \

.\} while(0)

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/124349.html

(0)

相关推荐

  • git hub最好的java项目(github 开源cms)

    技术如何在Gihub上面精准搜索开源项目这篇文章给大家介绍如何在Gihub上面精准搜索开源项目,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。开源项目的组成部分在讲清楚之前呢,我们先来了解一下一个开源

    攻略 2021年12月22日
  • html中设置背景颜色的语句是(html中设置背景颜色的代码是)

    技术在html中设置背景颜色的代码是什么这篇文章主要为大家展示了“在html中设置背景颜色的代码是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“在html中设置背景颜色的

    攻略 2021年12月19日
  • Java语言和C++语言的差异是什么

    技术Java语言和C++语言的差异是什么本篇内容主要讲解“Java语言和C++语言的差异是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java语言和C++语言的差异是什

    攻略 2021年11月29日
  • Xsheel使用小技巧有哪些

    技术Xsheel使用小技巧有哪些这篇文章将为大家详细讲解有关Xsheel使用小技巧有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。❝ 工作中无可避免的会使用到Xsh

    攻略 2021年11月9日
  • html5新增标签是什么(html5视频标签是哪个)

    技术html5视频标签是哪个小编给大家分享一下html5视频标签是哪个,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    攻略 2021年12月17日
  • PSQL常用函数汇总

    技术PSQL常用函数汇总 PSQL常用函数汇总正则表达式,PSQL,时间处理,字符串处理PSQL常用函数汇总不定时更新1. 基本函数
    — 1.1 平均值avg()
    — 1.2 求和sum()

    礼包 2021年10月27日