gcc产生类型转换告警

问题背景:

  看 https://www.cnblogs.com/sinaxyz/p/4525208.html 这个篇blog时候,发现在应用层代码中,函数 int open_netlink() 中,有这么一句:

 

int open_netlink()
{
    /*...*/
    struct sockaddr_nl addr;
    
    memset((void *)&addr, 0, sizeof(addr));
    /*...*/
    addr.nl_pid = getpid()
    /*...*/
}

 

 

  通过查询,发现:

 

struct sockaddr_nl {
    __kernel_sa_famiy_t nl_family;
    unsigned short nl_pad;
    __u32 nl_pid;  //无符号整型
    __u32 nl_groups;
};

 

 

pid_t getpid(void); //pid是int类型

 

解决方案:

  随便写的demo示例,隐式类型转换时候不报warning,加上选项 -Wconversion 就好了。

gcc -O2 -Wall -Wconversion test.c -o test

 

posted on 2019-06-05 14:34  rivsidn  阅读(486)  评论(0编辑  收藏  举报

导航