C Detail
细节
-
do....while()
和while()
的区别do...while(0U)
的作用-
确保宏定义正确展开
如果原语句为:
if(!value) foo(wolf);
在
#define foo(x) bar(x); baz(x)
的情况下,展开为:if(!value) bar(wolf); baz(wolf); //展开效果与我们期望的不符
如果采用
do...while(0U)
,则展开为:if(!value) do{ bar(x); baz(x); }while(0U);
-
实现局部作用域
#define swap(a,b) do{\ a = a + b;\ b = a - b;\ a = a - b;\ }while(0U) int main() { int a = 1, b = 2; if(1) swap(a,b); else a = b; return 0; } //展开后为 int main() { int a = 1, b = 2; if(1) do{ a = a + b; b = a - b; a = a - b; }while(0U); else a = b; return 0; }
-
避免使用
goto
语句goto
语句可以用来进行错误处理,但是过多的goto
会使代码的维护困难,因此,采用do...while(0U)
加break
的方法,来实现goto
的功能。#include <stdio.h> #include <stdlib.h> int main() { int res = -1; if(0 != res
-