【问题标题】:Structure and tagged union in cc中的结构和标记联合
【发布时间】:2013-11-28 08:06:48
【问题描述】:
#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 struct udp unions udpclient


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的回复。
    • 可以使用 bool 吗?我收到错误:语法错误:标识符布尔。
    • @user2984410 bool 是自 C99 以来的标准类型,但您需要 #include <stdbool.h>。如果您使用的是非 C99 编译器(例如 Visual Studio),它将无法正常工作。
    • 我包含 stdbool.h 然后我也收到类似错误:fatal error C1083: Cannot open include file: 'stdbool.h': No such file or directory
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多