addrinfo的存储大小尚不清楚

Lel*_*ton 7 c networking

我在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)

s7a*_*ser 7

几点:

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

    #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)