如何解决gcc结构分配警告在初始化程序周围缺少大括号
以下
#include <net/route.h>
#include <netinet/in.h>
int main(){
struct rtentry e={};
*((struct sockaddr_in*)(&(e.rt_genmask)))=(struct sockaddr_in){.sin_family=AF_INET,.sin_port=0,.sin_addr=INADDR_ANY};
return 0;
}
给出警告(gcc -std = c11 -Wall test.c)
test.c:5:45: warning: missing braces around initializer [-Wmissing-braces]
5 | *((struct sockaddr_in*)(&(e.rt_genmask)))=(struct sockaddr_in){.sin_family=AF_INET,.sin_addr=INADDR_ANY};
| ^
^
为什么?我该如何修复代码?
解决方法
- INADDR_ANY is macro defined。
-
in_addr
是用于包装价值的结构。 您需要使用.sin_addr={INADDR_ANY}
来确保它已由值INADDR_ANY
初始化。
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
已修复:https://godbolt.org/z/xM8r1E
#include <net/route.h>
int main(void) {
struct rtentry e={};
*(struct sockaddr_in*)(&(e.rt_dst))=(struct sockaddr_in){
.sin_family=AF_INET,.sin_port=0,.sin_addr={INADDR_ANY}
};
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。