c中的结构和标记联合

时间:2013-11-28 08:06:48

标签: c struct udp unions udpclient

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

}

我已经创建了一个嵌套在其中的结构和taggedunion。可以像上面那样将主机名和地址定义为常量吗?是否可以通过为其创建对象来分配一些值。任何人都可以给我一些想法。

1 个答案:

答案 0 :(得分: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" } };