c语言常见warning的消除方法及重要性

您所在的位置:网站首页 spd告警是什么意思 c语言常见warning的消除方法及重要性

c语言常见warning的消除方法及重要性

2024-01-15 01:02| 来源: 网络整理| 查看: 265

消除编译过程中出现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) { 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; }

2.warning: ‘xxx’ defined but not used [-Wunused-function]

static 修饰的xxx函数没有被使用到,会出现该告警。但是去掉static修饰xxx函数没有被调用,却没有此告警。说明编译器对代码区符号的属性是区分的。

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] = {0}; 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() { std::string ver("ver="); #ifdef DEBUG ver += (std::string(VER_NUM) + "&debug=true"); #else // release version string...\ ver += std::string(VER_NUM); #endif return ver; } int main() { std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3