我正在为嵌入式系统编写一些 C++ 代码。代码使用的 I/O 接口要求每条消息的大小(以字节为单位)是 2 的幂。现在,代码做了这样的事情(在几个地方):
#pragma pack(1)
struct Message
{
struct internal_
{
unsigned long member1;
unsigned long member2;
unsigned long member3;
/* more members */
} internal;
char pad[64-sizeof(internal_)];
};
#pragma pack()
我第一次尝试在 64 位 Fedora 上编译代码,这里long
是 64 位。在这种情况下,sizeof(internal_)
大于 64,数组大小表达式下溢,编译器抱怨数组太大。
理想情况下,我希望能够编写一个宏来获取结构的大小并在编译时评估填充数组的所需大小,以便将结构的大小四舍五入为 2 的幂。
我查看了Bit Twiddling Hacks页面,但我不知道那里的任何技术是否真的可以在宏中实现,以便在编译时进行评估。
这个问题还有其他解决方案吗?还是我应该延续这个问题,只是将神奇的 64 更改为神奇的 128?