看板 C_and_CPP 關於我們 聯絡資訊
我的程式碼如下 #define ishigh(data) \ do{ \ (( data & 0x01 )^ 0x00); \ }while(0) int main(int argc, char const *argv[]) { int data = 1; if(ishigh(data);) { fprintf(stderr, "%s[%d] \n", __FUNCTION__, __LINE__); } else { fprintf(stderr, "%s[%d] \n", __FUNCTION__, __LINE__); } return 0; } 編譯結果為error: expected expression before ‘do’ 請問一下如何寫才是對的 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 49.218.5.191
tjhuang:if() 裡面應該不能吃 {} 的字元,移掉 do, while(0) 08/16 09:42
purincess:如果你只是要用在if裡面沒必要用do while guard 吧@@ 08/16 12:28
purincess:另外if(isxxxx();) <- 不能有分號 08/16 12:29
diabloevagto:不能直接inline? 08/16 12:34
swhaaaaa:OK,我了解了,因為我試驗看看可不可以這樣寫,謝謝各位 08/16 14:46
swhaaaaa:這樣是不是意味著condition不能使用多行macro來實作 08/16 14:47
swhaaaaa:inline我沒試過,有人試過嗎? 08/16 14:48
LPH66:倒不是什麼東西不能使用多行 macro 08/16 15:26
LPH66:你得要知道 macro 對你的程式做了什麼事 08/16 15:26
LPH66:macro 會直接把內容給代換進使用處 08/16 15:27
LPH66:所以你要看代換之後程式還能不能用 08/16 15:28
LPH66:而且 macro 的寫法也是要看用法而定的 08/16 15:29
swhaaaaa:那以if的condition來看,如果我要用macro做多個運算後再 08/16 16:16
swhaaaaa:做判斷這樣辦的到嗎? 08/16 16:16
swhaaaaa:那以這個case要用do while(0)預防錯誤是否可行 08/16 16:17
swhaaaaa:我這個問題其實只是想試看看用macro來做,不然其使用 08/16 16:17
swhaaaaa:function的回傳值就可以了 這純粹只是個實驗 08/16 16:17
CaptainH:你根本不知道為什麼要加上 do{ }while(0) .. 08/16 16:56
CaptainH:照你的code會被展開成 if( do{...}while(0); ) 08/16 16:57
CaptainH:你認為這語法是對的嗎? 08/16 16:57
swhaaaaa:do while(0)只是避免在使用的時候語法錯誤 08/16 22:03
swhaaaaa:我會發問只是因為我想到寫macro可以使用do while(0) 08/16 22:07
swhaaaaa:但是在if使用時有語法錯誤,想問問各位是否有我所不知道 08/16 22:08
swhaaaaa:或者我有地方用錯,可以就可以不能這樣用就不能這樣用 08/16 22:09
swhaaaaa:我會再發言是因為LPH66說:倒不是什麼東西不能使用多行 08/16 22:10
swhaaaaa:才想是不是真的可以用,可以不要用問句來回答問題,謝謝 08/16 22:11
ah7675:你可以多看看開源套件是怎麼寫的 你的需求只要連if一起包在 08/16 22:22
ah7675:macro裡就行 另外不懂就不懂 不要硬扯一堆 明眼人一看就知 08/16 22:23
ah7675:到你的問題跟程度 沒必要硬撐 08/16 22:24
swhaaaaa:我會問就是不懂,我也很努力在說明我會這樣做的出發點 08/16 22:29
swhaaaaa:用if直接帶進去這我也想過這樣做也是可行的 08/16 22:30
swhaaaaa:我的想法只是在condition中是否可以用macro作多行運算 08/16 22:31
swhaaaaa:如果我的macro跟一般基本if的語法使用沒錯,只是加在一起 08/16 22:33
swhaaaaa:不行,而不是有我不知道的用法這樣,我的問題就得到解答 08/16 22:34
swhaaaaa:謝謝ah7675的回答 08/16 22:35
swhaaaaa:謝謝各位的回文 08/16 22:46
DayFly0515:do while(); <=分號忘了加? 08/19 15:40
linotwo:分號是故意不加,因為預期使用時 macro 後面會接分號。 08/19 15:58
purincess:就是為了讓真正使用的時候可以加分號所以才不加 08/19 15:59
purincess:樓樓上贏惹 XD 08/19 15:59