[問題] 編譯器 關掉特定 warning
程式常常寫錯,為了比較好 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
推
03/14 12:03, , 1F
03/14 12:03, 1F
編譯的時候只有錯誤的行數編號,沒有 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
→
03/14 12:59, , 2F
03/14 12:59, 2F
→
03/14 13:04, , 3F
03/14 13:04, 3F
→
03/14 13:05, , 4F
03/14 13:05, 4F
因為程式可以長這樣
bool isSuccess = false;
isSuccess = isSuccess || PlanA(); //先做 A 計畫
isSuccess = isSuccess || PlanB(); //如果 A 計畫失敗,才做 B 計畫
isSuccess = isSuccess || PlanC(); //連 B 計畫也失敗,才做 C 計畫
isSuccess = isSuccess || Error(); //上面都失敗,就顯示錯誤
這樣寫感覺很優雅,隨時可以在新增 Plan
→
03/14 13:53, , 5F
03/14 13:53, 5F
樓上謝啦
對 gcc 加了這兩個參數 -Wno-unused-value 跟 -Wno-unused-variable
就可以把上面講的兩個 warning 關掉了!!
剛剛發現原來 -Wall 就是下面這堆參數的簡寫
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wall-260
雖然還是不知道 #pragma warning(disable : ... ) 這種用法怎麼用
但是已經解決我的問題了
→
03/14 14:38, , 6F
03/14 14:38, 6F
這樣的確是好習慣,但是程式寫到一半明明知道那是假警告還要去改,會改到煩...
→
03/14 16:16, , 7F
03/14 16:16, 7F
→
03/14 16:17, , 8F
03/14 16:17, 8F
→
03/14 16:34, , 9F
03/14 16:34, 9F
→
03/14 16:34, , 10F
03/14 16:34, 10F
推
03/14 16:38, , 11F
03/14 16:38, 11F
推
03/14 16:42, , 12F
03/14 16:42, 12F
→
03/14 16:44, , 13F
03/14 16:44, 13F
→
03/14 16:44, , 14F
03/14 16:44, 14F
懂了,所以說 #pragma warning(disable : ... ) 這種用法是專門給 VC 用的?
→
03/14 16:55, , 15F
03/14 16:55, 15F
→
03/14 16:57, , 16F
03/14 16:57, 16F
→
03/14 16:58, , 17F
03/14 16:58, 17F
→
03/14 17:02, , 18F
03/14 17:02, 18F
→
03/14 17:03, , 19F
03/14 17:03, 19F
剛剛想了其他在 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 的大括號裡面不寫東西,覺得有點不習慣
→
03/14 17:10, , 20F
03/14 17:10, 20F
→
03/14 17:10, , 21F
03/14 17:10, 21F
→
03/14 17:11, , 22F
03/14 17:11, 22F
→
03/14 17:12, , 23F
03/14 17:12, 23F
→
03/14 17:12, , 24F
03/14 17:12, 24F
lambda 完全不熟,感覺很好用...
推
03/14 17:28, , 25F
03/14 17:28, 25F
→
03/14 17:29, , 26F
03/14 17:29, 26F
→
03/14 17:29, , 27F
03/14 17:29, 27F
→
03/14 17:29, , 28F
03/14 17:29, 28F
→
03/14 17:30, , 29F
03/14 17:30, 29F
→
03/14 17:30, , 30F
03/14 17:30, 30F
→
03/14 17:31, , 31F
03/14 17:31, 31F
→
03/14 17:31, , 32F
03/14 17:31, 32F
→
03/14 17:33, , 33F
03/14 17:33, 33F
修一下
※ 編輯: xxxx9659 來自: 61.60.254.19 (03/14 17:37)
推
03/14 17:37, , 34F
03/14 17:37, 34F
→
03/14 17:39, , 35F
03/14 17:39, 35F
→
03/14 17:40, , 36F
03/14 17:40, 36F
→
03/14 17:40, , 37F
03/14 17:40, 37F
→
03/14 17:42, , 38F
03/14 17:42, 38F
→
03/14 19:04, , 39F
03/14 19:04, 39F
推
03/14 19:07, , 40F
03/14 19:07, 40F
→
03/14 19:48, , 41F
03/14 19:48, 41F
→
03/14 19:49, , 42F
03/14 19:49, 42F
→
03/14 19:55, , 43F
03/14 19:55, 43F
→
03/14 21:43, , 44F
03/14 21:43, 44F
→
03/14 21:43, , 45F
03/14 21:43, 45F
→
03/14 23:13, , 46F
03/14 23:13, 46F
→
03/15 01:37, , 47F
03/15 01:37, 47F
→
03/15 01:37, , 48F
03/15 01:37, 48F
→
03/15 10:16, , 49F
03/15 10:16, 49F
→
03/15 12:09, , 50F
03/15 12:09, 50F
推
03/17 04:55, , 51F
03/17 04:55, 51F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 5 篇):