gcc产生类型转换告警

Posted rivsidn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于gcc产生类型转换告警的主要内容,如果未能解决你的问题,请参考以下文章

在代码片段中包含类型转换

为啥 GCC 会警告这种隐式转换?

为啥将拆分为 wav 文件的旋律转换为拆分的 mp3 会在片段边界处产生不好的声音?

数据类型隐式转换导致的阻塞

数据类型隐式转换导致的阻塞

C++ 编译时提示:不能将参数 1 从“char [6]”转换为“LPCTSTR”