Re: [問題] 編譯器 關掉特定 warning

看板C_and_CPP作者時間11年前 (2013/03/14 23:40), 編輯推噓3(3018)
留言21則, 4人參與, 最新討論串4/5 (看更多)
※ 引述《xxxx9659 (嘎嘎嘎嘎嘎)》之銘言: : 因為程式可以長這樣 : bool isSuccess = false; : isSuccess = isSuccess || PlanA(); //先做 A 計畫 : isSuccess = isSuccess || PlanB(); //如果 A 計畫失敗,才做 B 計畫 : isSuccess = isSuccess || PlanC(); //連 B 計畫也失敗,才做 C 計畫 : isSuccess = isSuccess || Error(); //上面都失敗,就顯示錯誤 : 這樣寫感覺很優雅,隨時可以在新增 Plan 純粹看到這個覺得可以寫得更簡單啊 PlanA() || PlanB() || PlanC() || Error(); 一個變數都不用存啊 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.248.87.113 ※ 編輯: AntaresStar 來自: 111.248.87.113 (03/14 23:42)

03/14 23:47, , 1F
XDDDD
03/14 23:47, 1F

03/14 23:48, , 2F
不過剛剛試一下發現這樣還是會被報warning
03/14 23:48, 2F

03/14 23:49, , 3F
所以得用(void)( )把這堆東西包起來 XD
03/14 23:49, 3F

03/15 00:34, , 4F
實際上這就是我要做的! 這樣寫很漂亮阿!是吧...
03/15 00:34, 4F

03/15 04:10, , 5F
為什麼不用 if(!PlanA() || !PlanB() || ... ) Error();
03/15 04:10, 5F

03/15 04:11, , 6F
雖然不太喜歡講正經的東西,但是這樣搞會害接你 code 的
03/15 04:11, 6F

03/15 04:12, , 7F
心裡非常圈叉。
03/15 04:12, 7F

03/15 04:14, , 8F
幫人擦 10 幾年屁股的要是脾氣差一點可能看到就爆炸了...
03/15 04:14, 8F

03/15 05:30, , 9F
fn1() || Error(); 這種寫法不好
03/15 05:30, 9F

03/15 05:30, , 10F
我只會拿它當暫時性的 debug 技巧
03/15 05:30, 10F

03/15 05:31, , 11F
#define Error()
03/15 05:31, 11F

03/15 05:31, , 12F
(printf("fn1會錯的行數: %s", __LINE__), false)
03/15 05:31, 12F

03/15 05:32, , 13F
這樣可以把整份程式的 fn1() 取代成 (fn1() || Error())
03/15 05:32, 13F

03/15 05:32, , 14F
但是實際的程式的確會這樣寫比較好
03/15 05:32, 14F

03/15 05:33, , 15F
if(!PlanA() && !PlanB() && ... ) Error();
03/15 05:33, 15F

03/15 07:50, , 16F
用if(!...)的寫法很容易||跟&&搞錯
03/15 07:50, 16F

03/15 07:51, , 17F
通常那樣我會用一串的 if(PlanA()) continue; 之類的
03/15 07:51, 17F
※ 編輯: AntaresStar 來自: 111.248.87.113 (03/15 07:56)

03/15 18:49, , 18F
debug macro 用的話倒是常見。至於 ! && || 搭配只要條件
03/15 18:49, 18F

03/15 18:50, , 19F
看起來沒差太多,不要混雜得太過份,是不會產生混淆的。
03/15 18:50, 19F

03/15 18:51, , 20F
一般遇到要混搭 || && 在 if 裡面的狀況,讓程式比較好讀
03/15 18:51, 20F

03/15 18:51, , 21F
的方式就是寫一個名稱有自我描述能力的函式去包起來。
03/15 18:51, 21F
文章代碼(AID): #1HGUzJbN (C_and_CPP)
文章代碼(AID): #1HGUzJbN (C_and_CPP)