1. 程式人生 > >c語言常見warning的消除方法及重要性

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

消除編譯過程中出現warning告警的重要性

在編譯程式碼過程中,要注意對warning告警的消除,雖說一般warning是不會影響編譯結果的,但是由warning引起的問題一般不好查詢原因,所以在提交程式碼或者自己寫程式碼的時候,一定要儘量的消除warning告警。一面以一些例項來說明消除warning告警的重要性:

  1. 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)
{
    list_ptr->nbr_ipaddr.vrfid = 0;
    list_ptr->nbr_ipaddr.family = AF_INET;
    list_ptr->nbr_ipaddr.prefixlen = tmp_nbr->ident.address->prefixlen;
    list_ptr->nbr_ipaddr.u.prefix4 = (PSP_ipv4Address_t)tmp_nbr->
                                    ident.address->u.prefix4.s_addr;
}

modify after:
if(tmp_nbr->ident.address->family == AF_INET)
{
    list_ptr->nbr_ipaddr.vrfid = 0;
    list_ptr->nbr_ipaddr.family = AF_INET;
    list_ptr->nbr_ipaddr.prefixlen = tmp_nbr->ident.address->prefixlen;
    list_ptr->nbr_ipaddr.u.prefix4 = (PSP_ipv4Address_t)tmp_nbr->
                                    ident.address->u.prefix4.s_addr;
}