【发布时间】:2020-12-10 10:34:12
【问题描述】:
以下
#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_port=0,.sin_addr=INADDR_ANY};
| ^
^
为什么?如何修复代码?
【问题讨论】:
-
rtenty或rtentry?我在 route.h 中找到了后者。 -
如果我使用 C 编译器,它会编译。 godbolt.org/z/xKETe3 。但是如果我切换到 C++ 编译器,就会出现错误而不是警告。
-
@LouisGo
-Wall -
.sin_addr={INADDR_ANY}- sin_addr 是一个组合。这也将使它对 c++ 友好。
标签: c gcc struct gcc-warning