Re: [問題] 請問if判斷式裡是否可以用macro做condition
※ 引述《swhaaaaa (路人甲)》之銘言:
: → 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
你這個回答正好證明了 CaptainH 的猜測:
你對在 macro 裡寫 do { ... } while(0) 的原因是一知半解
那與其用這個一知半解的東西還不如不要用
(嘛, 不過還是要給一下正確的知識: 參閱本版 #1DmPUtv4 及該篇推文
簡單的說那是限定使用情境下的寫法 並不是到處都能用的 雖然看起來很像)
看完了那篇再回來你的問題就會發現
這裡你一知半解地用了 do { ... } while(0) 反而把事情複雜化了
你這裡只不過是要讓 ishigh(data) 根據狀況算出一個 true 或 false 而已
那麼就簡單一點吧 回歸 macro 最開始學到的寫法
#define ishigh(data) (((data) & 0x01) != 0)
(我知道有人想把 != 0 拿掉, 不過行行好, 在這裡請不要給初學者困擾 XD)
有一句話要記起來: 雖然函式型的 macro 看起來像函式 但那個 200% 不是函式
所以在你分不清一般函式跟函式型 macro 的時候請不要用這種 macro
更何況是寫到要分行的 macro 那種東西平常其實是很少碰到的
在我看來寫到要分行的 macro 不是太長就是太大塊
太長的就算了 太大塊的其實真的不適合寫成 macro 還不如獨立寫成函式
而如果你真的對獨立寫成函式感到有速度上的不安的話 (雖然那 95% 都是錯覺 XD)
那就把 inline 貼在函式前面吧 (←這個才是四樓推文想跟你說的)
--
実琴:「河野!你真的就這樣被物質慾望給吸引過去了嗎?!」
亨:「只要穿著女裝擺出親切的樣子,所有必要花費就能全免,似乎一點都不壞啊。」
実琴:「難道你沒有男人的尊嚴了嗎?!」
亨:(斷然道)「沒有。在節衣縮食且生活吃緊的學生面前,沒有那種東西。」
--プリンセス・プリンセス 第二話
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.41.36.168
→
08/16 22:37, , 1F
08/16 22:37, 1F
→
08/16 22:39, , 2F
08/16 22:39, 2F
→
08/16 22:40, , 3F
08/16 22:40, 3F
→
08/16 22:40, , 4F
08/16 22:40, 4F
→
08/16 22:41, , 5F
08/16 22:41, 5F
→
08/16 22:42, , 6F
08/16 22:42, 6F
→
08/16 22:42, , 7F
08/16 22:42, 7F
→
08/16 22:43, , 8F
08/16 22:43, 8F
→
08/16 22:44, , 9F
08/16 22:44, 9F
推
08/16 22:44, , 10F
08/16 22:44, 10F
→
08/16 22:45, , 11F
08/16 22:45, 11F
推
08/17 00:01, , 12F
08/17 00:01, 12F
推
08/17 05:20, , 13F
08/17 05:20, 13F
→
08/17 05:20, , 14F
08/17 05:20, 14F
→
08/17 05:21, , 15F
08/17 05:21, 15F
→
08/17 05:21, , 16F
08/17 05:21, 16F
→
08/17 05:21, , 17F
08/17 05:21, 17F
推
08/17 16:13, , 18F
08/17 16:13, 18F
推
08/17 21:39, , 19F
08/17 21:39, 19F
推
08/18 06:09, , 20F
08/18 06:09, 20F
→
08/18 06:10, , 21F
08/18 06:10, 21F
→
08/18 06:11, , 22F
08/18 06:11, 22F
→
08/18 06:12, , 23F
08/18 06:12, 23F
→
08/19 10:09, , 24F
08/19 10:09, 24F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):