2013-11-28 59 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