2013-11-28 60 views
0
#define HOST_NAME "UDP" 
#define ADDRESS "127.0.0.1" 
struct UDP_IP_Parameters { 
     uint version; /* e.g. "1.0" = 0x0100 */ 
     uint port; /* PORT */ 
     taggedunion { 
      "HOST_NAME" char[256]; 
      "ADDRESS" char[15]; 
     }; 
}; 

int main() 
{ 
struct UDP_IP_Parameters udp; 
udp.version = 0x0100; 
udp.port = 444; 

} 

我已經創建了一個嵌套在其中的結構和標記聯合。是否有可能將主機名稱和地址定義爲像上面那樣的常量?是否可以通過爲其創建對象來分配一些值。任何人都可以給我一些想法。c中的結構和標記聯合

回答

2

這不是C.

不,你不能一個類型聲明中指定的值。

你能做的最接近的是大概是這樣的:

typedef struct { 
    uint16_t version; /* Guessing size requirements. */ 
    uint16_t port; 
    bool resolved; 
    union { 
    char host_name[256]; 
    char address[24]; 
    } addr; 
} UDP_IP_Parameters; 

以上使用resolved標誌「標籤」的工會,所以程序可以知道哪個成員工會是有效的。

您應該能夠初始化像這樣的實例:

UDP_IP_Parameters so = { 0x100, 80, false, { "stackoverflow.com" } }; 

不知道如果(在C99),你可以使用點語法來做到這一點:

UDP_IP_Parameters so = { 0x100, 80, true, { .address = "198.252.206.16" } }; 
+0

非常感謝您對答覆。 – user2984410

+0

是否可以使用bool?我得到錯誤:語法錯誤:標識符布爾。 – user2984410

+0

@ user2984410'bool'是自C99以來的標準類型,但您需要'#include '。如果您使用的是非C99編譯器(例如Visual Studio),則它不起作用。 – unwind