看板 C_and_CPP 關於我們 聯絡資訊
程式常常寫錯,為了比較好 debug 所以編譯的時候會對 gcc 下 -Wall 跟 -Werror 參數 對於一些我覺得不太重要的 warning 不知道怎麼關掉 例如,我想要把這兩個 warning 關掉 void fn1(){ int a = 1; (a == 10) && printf("a 等於 10\n"); // warning: value computed is not used } void fn2(){ int a; // 這個程式還沒開始寫,只是先寫出架構 // warning: unused variable 'a' } 上網查到這樣可以關 #pragma warning(push) #pragma warning(disable : warning id ) //程式... #pragma warning(pop) 但是我不知道這兩個 warning 的 id 是多少 請問 warning id 有表可以查嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.60.254.15
LPH66:就編一次之後看 compiler 的那些 warning 給什麼編號 03/14 12:03
編譯的時候只有錯誤的行數編號,沒有 warning 編號 Q_Q 顯示 warning 訊息像這樣 $ gcc -Wall test.c test.c: In function ‘SelectVertexByCare’: test.c:699: error: unused variable ‘c’ test.c: In function ‘DisconnectedRule’: test.c:832: error: unused variable ‘isFind’ test.c: In function ‘ReductionRules’: test.c:863: error: value computed is not used test.c:868: error: value computed is not used
linotwo:google "Diagnostic Pragmas" 03/14 12:59
tinlans:其實我是非常不建議用 && || 去代替 if 03/14 13:04
tinlans:除了害新手可能一時之間看不懂外,並沒有什麼幫助。 03/14 13:05
因為程式可以長這樣 bool isSuccess = false; isSuccess = isSuccess || PlanA(); //先做 A 計畫 isSuccess = isSuccess || PlanB(); //如果 A 計畫失敗,才做 B 計畫 isSuccess = isSuccess || PlanC(); //連 B 計畫也失敗,才做 C 計畫 isSuccess = isSuccess || Error(); //上面都失敗,就顯示錯誤 這樣寫感覺很優雅,隨時可以在新增 Plan
silentlich:-Wno-unused-variable 03/14 13:53
樓上謝啦 對 gcc 加了這兩個參數 -Wno-unused-value 跟 -Wno-unused-variable 就可以把上面講的兩個 warning 關掉了!! 剛剛發現原來 -Wall 就是下面這堆參數的簡寫 http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wall-260 雖然還是不知道 #pragma warning(disable : ... ) 這種用法怎麼用 但是已經解決我的問題了
diabloevagto:我不會去把警告關掉,我會去把警告修正 03/14 14:38
這樣的確是好習慣,但是程式寫到一半明明知道那是假警告還要去改,會改到煩...
loveme00835:優雅個雕... 拿邏輯運算的副作用去做branch... 還不如 03/14 16:16
loveme00835:用mpl還比你好看 03/14 16:17
xxxx9659:可是副作用的 short-circuit evaluation 一定會成立阿 03/14 16:34
xxxx9659:可攜性100% 讚讚 03/14 16:34
purpose:就只是能耍帥而已,一點都不優雅 03/14 16:38
LPH66:#pragma warning(disable:...) 好像是 VC only 的東西 03/14 16:42
LPH66:不過反正編譯器看到看不懂的 #pragma 會略過所以... 03/14 16:44
LPH66:VC 的 error/warning 是都有編號的沒錯 03/14 16:44
懂了,所以說 #pragma warning(disable : ... ) 這種用法是專門給 VC 用的?
loveme00835:http://ideone.com/DPUHmC 03/14 16:55
loveme00835:如果要比改的程度... 你的寫法跟if-else差沒多少 03/14 16:57
loveme00835:阿 true/false 相反了, 改一下就好 03/14 16:58
xxxx9659:喔喔喔~ 這就是傳說中的 C++11 的威力嗎 有點強!! 03/14 17:02
xxxx9659:居然可以把 function 存在陣列裡面!! 03/14 17:03
剛剛想了其他在 C 裡面的寫法 if( PlanA() ){ return; } if( PlanB() ){ return; } if( PlanC() ){ return; } if( PlanD() ){ return; } if( Error() ){ return; } 優點: 好看!每行都一樣!而且不用了解 OR 運算的副作用 缺點: 會 return 掉,底下的程式不做 if( PlanA() == flase ){ //如果 PlanA() 失敗 if( PlanB() == flase ){ //如果 PlanB() 失敗 if( PlanC() == flase ){ //如果 PlanC() 失敗 if( PlanD() == flase ){ //如果 PlanD() 失敗 Error(); } } } 優點: 很直覺 缺點: 糟了!是世界奇觀! if( PlanA() ){ }else if( PlanB() ){ }else if( PlanC() ){ }else if( PlanD() ){ }else{ Error(); } 優點: 沒有太多 if 套坎,也可以隨時添加或註解 Plan 缺點: 是 if 的大括號裡面不寫東西,覺得有點不習慣
loveme00835:c語言就有 pointer to function 可以作類似的事... 03/14 17:10
loveme00835:用 function 是因為可以接 lambda 來統一一些需要參數 03/14 17:10
loveme00835:函式的介面 03/14 17:11
loveme00835:先把 language feature 用盡, 用到沒招再來考慮非人類 03/14 17:12
loveme00835:的寫法... 03/14 17:12
lambda 完全不熟,感覺很好用...
lausai:for(;;) { 03/14 17:28
lausai: if (PlanA()) break; 03/14 17:29
lausai: if (PlanB()) break; 03/14 17:29
lausai: ... 03/14 17:29
lausai: Error(); 03/14 17:30
lausai: break; 03/14 17:30
lausai:} // 這樣呢? 可以不用 if 大括號 03/14 17:31
lausai:被斷了 冏 03/14 17:31
xxxx9659:不小心插隊... 用 for 迴圈好像是剛剛 case 裡最好的一個 03/14 17:33
修一下 ※ 編輯: xxxx9659 來自: 61.60.254.19 (03/14 17:37)
purpose:原PO優雅做法的前提,不就是 PlanA() 失敗時,不用做任何 03/14 17:37
purpose:動作,可以直接衝去跑 PlanB()。再者 if 不用套坎的寫法 03/14 17:39
purpose:選擇也很多。就算真的失敗就要 return 也可以用 dtor 做 03/14 17:40
purpose:所謂底下的程式 03/14 17:40
purpose:上面打錯:PlanA 失敗時不用動作,只需要成功時跑 PlanB 03/14 17:42
uranusjr:可以不要砍來砍去的嗎, 那個字念「ㄑㄧㄢ」(嵌) 03/14 19:04
legendmtg:一點都不優雅..... 03/14 19:07
tinlans:我不是要你完全不用 && 和 ||,只是說外層起碼擺個 if 03/14 19:48
tinlans:你怎麼完全不考慮傳統的 if(A && B) 或 if (A || B) 呢... 03/14 19:49
tinlans:真要講求優雅你可以直奔 chain-of-responsibility pattern 03/14 19:55
akasan:gcc 4.7 警告後面會跟你講是哪個選項來的 03/14 21:43
akasan:例如 warning: unused variable ‘a’ [-Wunused-variable] 03/14 21:43
loveme00835:http://ideone.com/hEqekN 03/14 23:13
xxxx9659:樓上的程式一定要 C++11 才可以跑嗎 還是只要 C++ 就好 03/15 01:37
xxxx9659:要怎麼學習這種程式寫法,有推薦的書嗎 03/15 01:37
loveme00835:拿掉Varadic Template你預設的標準就能跑了 03/15 10:16
loveme00835:剛看到的 http://ppt.cc/uTAd 03/15 12:09
Killercat:.......我會建議改用CoR Pattern 03/17 04:55