繁体   English   中英

c中的结构和标记联合

[英]Structure and tagged union in c

#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。 可以像上面那样将主机名和地址定义为常量吗? 是否可以通过为其创建对象来分配一些值。 任何人都可以给我一些想法。

那不是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" } };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM