请教一个结构体方面的问题
现有有一要求:<br /> 结构体前面成员决定后面成员的有无,即结构体长度是可伸缩的<br />比如 typedef struct a<br />{ <br /> UINT8 b;<br /> UINT8 c; <br /> UINT8 d;<br /> UINT8 e;<br /> UINT16 f;<br /> UINT8 g; <br />};<br />这里成员变量 b中bit 3 决定成员变量d 的有无, 我不可能写成<br /> typedef struct a<br />{ <br /> UINT8 b;<br /> UINT8 c;<br /> #if (b&0x08 == 0x08) <br /> UINT8 d;<br /> #endif<br /> UINT8 e;<br /> UINT16 f;<br /> UINT8 g; <br />};<br />有啥的好法子?当然不行。 独立变量处理
UINT8 d;<br /><br />代码中,可能用到d的地方,<br />if (b&0x08 == 0x08) <br /> ddddddddddd<br /><br /><br />re
把可变成员用指针指向,动态分配(根据有决定作用的成员)结构成员的有无,编译时就定下了。不过
如果是要实现结构长度可变,可以使用零长度数组<br /><br /><br />struct A<br />{ <br /> UINT8 c; <br /> UINT8 e;<br /> UINT16 f;<br /> UINT8 g; <br /> UINT8 d; //结构最后一个成员设为零长度数组<br />};<br />UINT8 b;<br />struct A * test_p;<br /><br />if (b&0x08 == 0x08) <br /> test_p=malloc(sizeof(struct A) + 1); //1可以改为任意<br />else<br /> test_p=malloc(sizeof(struct A)) ;<br /><br /><br /><br /> <br /><br /><br /><br /><br /><br />先明确“预编译”是什么意思
肯定不可以的
因为编译器在处理你的代码时就要决定结构体的大小了。2楼,4楼都可以
页:
[1]