none
.c和.cpp不同的問題 RRS feed

  • 問題

  • 開發環境是VS2017 的C++ console程式

    需要用到socket的東西,遇到了一個在.c檔和.cpp檔會有不同的地方

    //.c檔裡面只能用SOCKADDR_IN6 
    #include <winsock2.h>
    #include <WS2tcpip.h>  
    
    void Test()
    {
    	SOCKADDR_IN6 a;
    }
    //.cpp檔裡面卻能用這一個
    #include <winsock2.h>
    #include <WS2tcpip.h>  
    
    void Test()
    {
    	sockaddr_in6 a;
    }

    這個struct定義在ws2ipdef.h裡面,為什麼會有不一樣?

    謝謝




    2019年11月14日 上午 01:47

所有回覆

  • 依據定義:

    typedef struct sockaddr_in6 {
        ADDRESS_FAMILY sin6_family; // AF_INET6.
        USHORT sin6_port;           // Transport level port number.
        ULONG  sin6_flowinfo;       // IPv6 flow information.
        IN6_ADDR sin6_addr;         // IPv6 address.
        union {
            ULONG sin6_scope_id;     // Set of interfaces for a scope.
            SCOPE_ID sin6_scope_struct;
        };
    } SOCKADDR_IN6_LH, *PSOCKADDR_IN6_LH, FAR *LPSOCKADDR_IN6_LH;


    typedef SOCKADDR_IN6_LH SOCKADDR_IN6;

    所以

    struct sockaddr_in6 和 SOCKADDR_IN6_LH 和 SOCKADDR_IN6是一樣的

    2019年11月14日 下午 12:31
  • 因为c语言和c++语言的语法不同,在c语言中struct是类型的一部分。因此在.c中应该写作:

    #include <winsock2.h>
    #include <WS2tcpip.h>
    void Test()
    {
        struct sockaddr_in6 a;
    }
    2019年11月14日 下午 01:33