如何使用GCC编译器强制执行struct bit顺序?
我想知道是否有一个GCC C编译器指令允许我确定结构打包的位顺序? 喜欢的东西:
#pragma bit_order left
这种需求的基本原理是我有以下结构:
struct { union { unsigned char BYTE; struct { unsigned char B0: 1; unsigned char B1: 1; unsigned char B2: 1; unsigned char B3: 1; unsigned char B4: 4; }BIT; }ITEM; } myStruct;
有了这个结构,我希望编译器以这种方式打包:
Bit order: | 7 6 5 4 3 2 1 0 | Label: |B0 B1 B2 B3 B4 B5 B6 B7 |
而不是GCC如何做到:
Bit order: | 7 6 5 4 3 2 1 0 | Label: |B7 B6 B5 B4 B3 B2 B1 B0 |
我正在处理具有巨大头文件的MCU,这些头文件具有根据规定的硬件地址计算位偏移的结构。 我希望在我尝试翻转制造商提供的文件中的所有字段之前,GCC C编译器中有一个编译器指令为我执行位顺序交换。
您使用的是哪个版本的GCC以及哪个平台? 存在一个pragma可以解决这个问题,但是从GCC 4开始,它不适用于x86。
#pragma reverse_bitfields on
更多详情:
http://groups.google.com/group/gnu.gcc.help/browse_thread/thread/747918655affa5c0?pli=1
如果你不介意重建GCC,那么所有相关的构建设置都在这里(搜索bitfield
):
http://gcc.gnu.org/onlinedocs/gccint/Storage-Layout.html
有关位域不好的一些细节:
C / C ++:强制位域顺序和对齐