亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 宏問題 [打印本頁]

作者: vincol    時間: 2007-10-10 20:37
標題: 宏問題
以前就有這個疑問,一直放著。
這次又看到,實在想不明白;

在定義一個宏操作時:

#define dosmething \
do {\
  操作\
}\
while(0)

為什么要加上一個do{} while(0)?????
作者: vincol    時間: 2007-10-10 21:54
??????????????又自己沙發(fā)!
作者: 融化的冰山    時間: 2007-10-10 22:10
這樣做的主要目的是讓這個define可以像一條語句那樣使用,例如
if (...)
  something;
如果不加do {}while (0),就需要寫成
if (...)
{
  something;
}
作者: vincol    時間: 2007-10-10 22:13
原帖由 融化的冰山 于 2007-10-10 22:10 發(fā)表
這樣做的主要目的是讓這個define可以像一條語句那樣使用,例如
if (...)
  something;
如果不加do {}while (0),就需要寫成
if (...)
{
  something;
}



...............,不對味啊。。。。。!

不置可否!
作者: mmmixx    時間: 2007-10-10 22:23
就是執(zhí)行一次的意思哦。因為有 {},所以里面可以定義一些局部變量。其實直接用 {} 就可以了,沒必要 do while
作者: zx_wing    時間: 2007-10-10 22:57
原帖由 mmmixx 于 2007-10-10 22:23 發(fā)表
就是執(zhí)行一次的意思哦。因為有 {},所以里面可以定義一些局部變量。其實直接用 {} 就可以了,沒必要 do while

不知道是那本書上說了do ... while(0)是為了防止錯誤的if匹配,讓大家覺得它只有這么一個用法了,其實它還可以在宏里面加break。
例如

  1. #define T(x) do \
  2. { \
  3. 操作 \
  4. if (x) \
  5.     break; \
  6. 操作 \
  7. } while(0)

復制代碼

當然你還可以用其它寫法代替,但它確實提供了這么一個功能
作者: mmmixx    時間: 2007-10-10 23:04
防止錯誤的if匹配防止的是什么樣一種情況呢?

加break這個功能不錯,挺方便的。
作者: dj_ukyo    時間: 2007-10-11 13:36
這個問題《Linux場景模式》里面介紹了
作者: vincol    時間: 2007-10-11 14:15
原帖由 dj_ukyo 于 2007-10-11 13:36 發(fā)表
這個問題《Linux場景模式》里面介紹了


手頭沒書,大俠們詳細舉例說明一下!




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2