我在C中编写一个简单的网络程序.当我打开-Wall
时--std=c11
,我得到一个关于声明结构的方式的错误消息.
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int main() {
struct addrinfo res;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该类型addrinfo
在sys/types.h文件中定义.使用指针时我没有收到错误.
如何解决此错误消息?
simple.c:9:25: error: storage size of ‘res’ isn’t known
struct addrinfo res;
^
Run Code Online (Sandbox Code Playgroud)
几点:
addrinfo
实际上是在中定义的netdb.h
.-E
标志来gcc
查看预处理器输出,并发现该addrinfo
结构实际上未在您的代码中定义.现在您应该怀疑可能缺少一些定义._POSIX_C_SOURCE
功能测试宏.所以,这应该解决上面提到的错误消息:
#define _POSIX_C_SOURCE 200112L
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int main() {
struct addrinfo res;
return 0;
}
Run Code Online (Sandbox Code Playgroud)