#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) 后面没有分号,加上分号后,同样在上面的例子中有语法错误
上一篇: 宏定义(#define)和常量(const)的区别
下一篇: do while(0)的妙用
推荐阅读
-
do while(0)的妙用
-
do{...}while(0)的妙用
-
__define_initcall(level,fn)和do_initcalls()的妙用
-
#define 中的 do{ }while(0)
-
Linux c/c++编程--知识点(1) #define 和 do{...}while(0) 的妙用
-
do{...}while(0)的妙用
-
while 与 do...while 的区别和使用方法
-
do{...}while(0)的巧妙用处
-
#ifndef和#define在头文件中的作用 博客分类: BCB #ifndef#define
-
#ifndef和#define在头文件中的作用 博客分类: BCB #ifndef#define