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