我希望我可以使用预处理器,但输入来自运行时..我尝试了条件typedef,不起作用。或有条件的声明,不起作用。虽然我并没有真正期望他们没有。而且,因为所有跟随的代码都完全相同,所以我不希望为每个结构重写两次。2结构之间的兼容性
有没有办法在C中做到这一点?或者采用不同的方法,结果相同。我所有的谷歌搜索都将我带入了C++模板。如果我不清楚,也许这将有所帮助:
#include <stdio.h>
struct a32 {
short bits;
unsigned long val;
// more values, not necessarily in the same order
};
struct a64 {
short bits;
unsigned long long val;
// etc...
};
int main(void) {
struct a32 mystruct;
// read mystruct from somewhere
if(mystruct.bits == 64) {
// then I need mystruct to be a64
// re-read mystruct
}
// exact same code for both structs
printf("%d\n", sizeof(mystruct.val));
return 0;
}
任何帮助,将不胜感激。
这应该是我的解决方案:)我认为不应该有填充问题,因为联盟将至少与其中声明的最大类型一样大? – Dan
谢谢,我认为这将做到这一点。 – olly
读完整的结构是一个坏主意。您需要先读取“位”,然后对该值进行“切换”以填充其余数据。 – James