c語言常見warning的消除方法及重要性

2021-09-05 07:28:42 字數 1815 閱讀 3955

消除編譯過程中出現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 ...