這種寫法會寫在macro裡
因為有些compiler是不允許忽然出現block的
EX:
#define aaa() do { xxx } while(0)
這樣如果使用者用在
if(xxx)
aaa();
or
bbb();
aaa();
ccc();
都可以
如果定義成
#define aaa() { xxx }
if(xxx)
aaa();
上面程式碼OK
但如果用在
bbb();
aaa();
ccc();
展開來變成
bbb();
{
xxx
}
ccc();
這樣就樣看compiler接不接受了
因此kernel都會這麼寫
以維持移植性
※ 引述《sceneryview (加油~~~)》之銘言:
: 藉由這一篇來請問一個相關的問題
: 在linux kernel的程式中,有時後會見到以下的寫法
: do
: {
: code...
: }while(0);
: 從字面上來看,就是只作一次
: 感覺就沒必要加do {}while(0)了
: 有人知道這種寫法的特殊用意嗎??
: ※ 引述《scrush (阿慶)》之銘言:
: : 不好意思,我一直對while(1)這邊有點不理解,爬文也沒看到我想要的答案才發文,
: : 我常常看到一些 code在程式最底端加上個 while(1){}; 或是while(1){}
: : 請問這是要做什麼用的?有加 ; 跟沒加 ; 有何分別?目的只是讓這段code一直執行嗎?
: : 如果是的話為何不必直接寫 while(1){code} ,用while(1)把程式幫起來不就得了嗎?
: : 還是說目的不同?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.97.250