C/C++中do{...}while(0)的作用

一:do{...}while(0)在定义宏时的作用。其实就是能够让你定义的宏按照你期望的方式执行而没有语法或逻辑错误,无论这个宏是在if判断里面使用还是放在其他别的地方使用。

1.在后面要加分号,使调用如同函数,例如

#define DELETE_POINTER(p)    \

do              \

{                \

if(NULL != p)                             \

delete p;                               \

p = NULL;                                \

}                                                   \

while(0)

调用:

int  a = 0;

int * p = &a;

DELETE_POINTER(p);

2.当放在if中使用时

#define FUN()     \

fun1();    \

fun2();

这个宏的意思是,当调用FUN()宏时,同时调用fun1()和fun2(),但是如果这个宏在调用的时候是放在if判断判断下面的,那么

if(a > 0)

FUN();

展开后变成

if(a > 0)

fun1();

fun2();

这样就变成无论a是否大于零,那么fun2()都会被执行。

而如果用do while(0)代替,那么就能够按照实际期望的那样被执行

3.当放在if else中使用时

#define FUN()     \

fun1();    \

fun2();

二:do{...}while(0)可以替换goto语句

原文地址:https://www.cnblogs.com/cumtchw/p/10076771.html

时间: 2024-10-12 04:01:40

C/C++中do{...}while(0)的作用的相关文章

collection.toArray(new String[0])中new String[0]的作用

new string[0]的作用 比如:String[] result = set.toArray(new String[0]); Collection的公有方法中,toArray()是比较重要的一个. 但是使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]. 虽然Object数组也不是不能用,但当你真的想用一个具体类型的数组,比如String[]时,问题就来了.而把Object[]给cast成 String[]还是很麻烦的,需要用到这个: String[] str

C++中减去‘0’的作用( -'0' )

我们在日常研(chao)究(xi)大佬们的代码时,可能会遇到减去字符'0'的情况,比如下图,这种语法问题吧说简单它不那么简单,毕竟不好理解:但说难吧也不难,其实就是让代码更简洁更有逼格的途径而已. 说了那么多屁话那么这个减去零到底是干啥的呢? 它的作用就是减去0的ASCII值:48.可以方便的用来转换大小写或者数字和和字符.比如我们可以写这么一个函数: #include <cstdio> #include <iostream> using namespace std; int ch

Thread.sleep(0)的作用

我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒?某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0) .既然是 Sleep 0 毫秒,那么他跟去掉这句代码相比,有啥区别么?我们先回顾一下操作系统原理. 操作

C++ 中 const 和 static 的作用

目录 const 的主要应用如下: const 关键字使用的注意点: C++中static关键字有三个明显的作用: const的主要应用如下: const 用于定义常量:const定义的常量编译器可以对其进行数据静态类型的安全检查. const 修饰函数形式参数:当输入参数为用户自定义类型和抽象数据类型的时候,将"值传递"改为"const 引用传递" 可以提高效率. const 修饰函数的返回值:如果给"指针传递"的函数返回值加const,则返回

Flex中 Array 的IndexOf 的作用

Flex中 Array 的IndexOf 的作用 1.说明    indexOf用于在索引中从小到大查找,假设查得到就返回索引值,查不到就返回-1: 2.实例 (1)设计源代码 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe

Java中String args[]起什么作用?

在百度知道上看到这样一个答案: 在命令提示符中运行该程序时 可以附加参数运行 输入的参数会存入到字符传数组 args[]中例如:在命令提示符中运行该程序的时候假设该程序在D的JAVA文件夹中D:JAVA\javac Example.javaD:JAVA\java Example 20则屏幕中输出This is a simple Java program.而args[]中所存储的是20 于是我试了一下: public class Hello { private int asd; public He

Python中逗号的三种作用

最近研究python  遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1.逗号在参数传递中的使用: 这种情况不多说  没有什么不解的地方 就是形参或者实参传递的时候参数之间的逗号 例如def  abc(a,b)或者abc(1,2) 2.逗号在类型转化中的使用 主要是元组的转换 例如: >>> a=11>>> b=(a)>>> b11>>> b=(a,)>>> b(11,)>>> b=(a,22)

在eclipse中使用Tomcat8.0时出现Could not publish server ...错误

在eclipse中使用Tomcat8.0时出现了 Could not publish server configuration for Tomcat v8.0 Server at localhost. Multiple Contexts have a path of "" 错误. 网上有两种解决方法,如下 如果是使用的eclipse tomcat 插件,需要在你的工作空间 找到如下文件:${WoskSpace}/.metadata\.plugins\org.eclipse.wst.se

Spring3.x中配置DBCP2.0数据库连接池

maven工程pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0      http://maven.apache.org/maven-v4_0_0.xs