addrinfo的存储大小尚不清楚

时间:2016-05-31 09:33:10

标签: c networking

我正在用C编写一个简单的网络程序。当我使用-Wall打开--std=c11时,我收到一条关于声明结构的方式的错误消息。

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>


int main() {

        struct addrinfo res;

    return 0;
}

类型addrinfo在sys / types.h文件中定义。使用指针时我没有收到错误。

如何解决此错误消息?

simple.c:9:25: error: storage size of ‘res’ isn’t known
         struct addrinfo res;
                         ^

1 个答案:

答案 0 :(得分:7)

有几点:

  1. 类型addrinfo实际上是在netdb.h
  2. 中定义的
  3. 您可以使用-E标记gcc来查看预处理器输出,并发现代码中实际上未定义addrinfo结构。现在你应该怀疑可能缺少一些定义。
  4. 可以看到here,为了公开定义,您需要使用_POSIX_C_SOURCE feature test macro
  5. 因此,这应该解决上面提到的错误消息:

    #define _POSIX_C_SOURCE 200112L
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>
    
    int main() {
        struct addrinfo res;
    
        return 0;
    }