消除編譯過程中出現warning告警的重要性
在編譯**過程中,要注意對warning告警的消除,雖說一般warning是不會影響編譯結果的,但是由warning引起的問題一般不好查詢原因,所以在提交**或者自己寫**的時候,一定要盡量的消除warning告警。一面以一些例項來說明消除warning告警的重要性:
warning: suggest parentheses around assignment used as truth value [-wparentheses]
這條告警作用很大:提示你在if語句中使用"="的真正意圖,是想賦值還是做判斷,例如下面的**就寫錯了:if語句明顯是想根據變數的值做乙個判斷,卻用了"=",而巨集af_inet不等於0,導致一定會進入這個if語句的body部分。可能當時沒有問題,若以後**擴充套件,支援了af_inet6位址族,就會出一些意想不到的問題。
modify before:
if(tmp_nbr->ident.address->family = af_inet)
modify after:
if(tmp_nbr->ident.address->family == af_inet)
2.warning: 『***』 defined but not used [-wunused-function]
static 修飾的***函式沒有被使用到,會出現該告警。但是去掉static修飾***函式沒有被呼叫,卻沒有此告警。說明編譯器對**區符號的屬性是區分的。
1.不用static修飾函式,nm檢視該函式符號在**區,t標識是global(external)
test_static(void);
0000000000400c32 t test_static
2.static修飾函式,nm檢視該函式符號在**區,t標識是local
static test_static(void);
0000000000400c32 t test_printf
3.warning: missing braces around initializer [-wmissing-braces]
braces : 括弧。告警的意思是初始化的時候少了括弧。明白這點,修改這個就比較容易了。具體見下面的示例:
before modify:
char stask[32] = ;
after modify:
char stask[32] = ;
4. warning: large integer implicitly truncated to unsigned type [-woverflow]
在迴圈結構下,存在變數自加的情況下一定要考慮是否會溢位,否則一旦溢位,就會出現各種意想不到的情況,這種情況一定要慎重。
5.warning: multi-line comment [-wcomment]
需要注意注釋行末尾的反斜槓,會將下一行也注釋掉,如果下一行是注釋的話,則沒有關係;如果不是的話,則會導致注釋掉有用的**,導致異常。
/*注釋行末尾的反斜槓不影響的情況*/
// this arg is a driver, for example c:\
// and you can ...
/*注釋行末尾的反斜槓有影響的情況*/
#include #include #define ver_num "10"
std::string get_version_str()
int main()
{ std::cout《該例子引用如下博文:
常見warning的處理方法
最近,處理乙個中介軟體中所有的warning,經過編譯發現警告資訊多如牛毛,而且這個中介軟體還是乙個國內絕對一流的公司做的,要是一直這樣下去,不知道中國的軟體什麼時候才能夠達標啊!下面對出現的警告簡單的總結一下 1 賦值型別不符,這也是最常見的 解決辦法可以強制型別轉換 2 實參形參型別不一致 解決...
CCF 消除類遊戲 C語言 201512 2
消除類遊戲是深受大眾歡迎的一種遊戲,遊戲在乙個包含有n行m列的遊戲棋盤上進行,棋盤的每一行每一列的方格上放著乙個有顏色的棋子,當一行或一列上有連續三個或更多的相同顏色的棋子時,這些棋子都被消除。當有多處可以被消除時,這些地方的棋子將同時被消除。現在給你乙個n行m列的棋盤,棋盤中的每乙個方格上有乙個棋...
C語言常見的習題
include intmain void int i,max max 0 for i 0 i 5 i printf d n a max return0 include include void bool number int n int main void void bool number int ...