#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)

相关推荐

  • 如何使用Java的MD5工具类和客户端测试类

    技术Java的MD5工具类和客户端测试类怎么使用这篇文章主要讲解了“Java的MD5工具类和客户端测试类怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的M

    攻略 2021年12月16日
  • MySQL面试题有哪些

    技术MySQL面试题有哪些本篇内容介绍了“MySQL面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!非关系型数

    攻略 2021年12月3日
  • Java 线程池中的线程复用是如何实现的

    技术Java 线程池中的线程复用是如何实现的Java 线程池中的线程复用是如何实现的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前几天,技术群里有个群

    2021年11月15日
  • 如何利用sql语句写入shell

    技术如何利用sql语句写入shell如何利用sql语句写入shell,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。目标ip:192.168.52.143一、

    攻略 2021年12月10日
  • 蛋糕简笔画图片大全,幼儿简单手工制作怎么做\’

    技术蛋糕简笔画图片大全,幼儿简单手工制作怎么做\我是爱做手工的Nina,很高兴来回答幼儿简单手工制作怎么做的话题蛋糕简笔画图片大全?我觉得幼儿手工要简单又要有创意,大家都知道孩子在幼儿期专注力不是很高,能吸引孩子专注力的

    生活 2021年10月27日
  • 如何实现element穿梭框性能优化

    技术如何实现element穿梭框性能优化这篇文章主要讲解了“如何实现element穿梭框性能优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现element穿梭框

    攻略 2021年10月26日