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产生类型转换告警的主要内容,如果未能解决你的问题,请参考以下文章