欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

#define 中的 do{ }while(0)

程序员文章站 2024-03-23 13:51:04
...

问题

C 语言经常使用如下宏定义一段函数

#define FUN(x) do {                                         \
               ....                                         \
        } while(0);

这里为何要用 do{ }while (0) 的形式?直接写成下面的样子,不也可以吗?

#define FUN(x) {                                  \
		  ....                                    \
        }

解答

考虑这样一种情况,我们定义宏函数FUN

#define FUN(x) {                                 \
	        func0();
	        func1();                             \
        } 

在如下场景使用它

if (true) 
	FUN(1);
else
    func2();

宏展开后,代码变成了

if(true)
   {
       func0();
       func1();
   }; //语法错误
else
   func2();

展开后多了分号,编译语法错误。
使用 do{ }while(0) 的形式定义FUN ,展开后

if(true)
    do {
    	func0();
    	func1();
	}while(0);
else 
    func2();

这样就没有语法错误了。

注意 #define 中的 do{} while(0) 后面没有分号,加上分号后,同样在上面的例子中有语法错误