c - c中的结构和标记 union

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

最佳答案

那不是 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标志来“标记” union 体,因此程序可以知道 union 体的哪个成员是有效的。

你应该能够像这样初始化一个实例:

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

不确定(在 C99 中)您是否可以使用点分语法来执行此操作:

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

关于c - c中的结构和标记 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20260730/

相关文章:

sockets - 重新连接以太网后,UDP套接字将写入过期的数据包。以太网断开连接后,如何从套接字刷新写缓冲区?

tcp - 是否有任何已知的方法来定义特定于应用程序的消息?

c - UDP 发送文件的确切字节数

c++ - ImageMagick pthread.h 多重定义

c - 按升序插入单链表

c - 来自 valgrind 的未初始化值

arrays - 结构内部的 Swift 数组仅追加一次,如何单独再次追加?

c++ - 如何部分禁用 cmake C/C++ 自定义编译器检查

c - 删除C BST中的节点

c - 不同编译器的 sizeof(struct) 不同