看code 有時候會看到沒營養的
do{ XXX } while(0)
直覺上會覺得很北七... 顯然北七的只是表面...
這種寫法常見在
#define
如
#define BEJO(x) {a(x-2);b(x);} while(0)
#define a(x) printf("%d\n", x)
#define b(x) printf("%d\n", x)
如果這樣寫
#define BEJO(x) a(x-2);b(x);
那
if(x >0 )
BEJO(x);
else
.....
會被展開成
if(x >0 )
a(x-2);b(x);;
else
.....
當場就b(x)爆炸了.....
那如果這樣寫
#define BEJO(x) {a(x-2);b(x)}
就...
if(x >0 )
{a(x-2);b(x)};
else
.....
那如果這樣寫
#define BEJO(x) {a(x-2);b(x);}
就...
if(x >0 )
{a(x-2);b(x);};
else
.....
不管怎麼寫~~都有可能會被呼叫者誤用到爆炸
按照
本來BEJO(x); <-- 會加分號的習性
do{} while(0)
剛剛好...
if(x >0 )
BEJO(x);
else
.....
會被展開成
if(x >0 )
{a(x-2);b(x);} while(0);
else
.....
很安全.....
沒有留言:
張貼留言