我看到一些嵌入式系统固件书籍/文章建议不要使用C的结构位字段,因为它不能移植。我知道顺序和填充是由实现定义的,但是使用位字段总是不可移植的吗?
我的意思是,如果我定义了一个8位微控制器驱动程序的配置结构,如下所示:
typedef struct
{
int channel_name :3 ; /*7 possible channels*/
int Enable :1 ; /*if 1 enable,otherwise disable*/
int Mode;
} conf_t 我不明白在这种情况下,实现定义的行为怎么会引发可移植性问题,有人能解释一下吗?
发布于 2020-08-10 14:54:41
以下是可能出现的一些可移植性问题:
int位字段时,不同的编译器会有不同的行为。该位是符号位还是数据?在位字段中(并且仅在那里),编译器可以将int视为有符号或无符号,并且在有符号的情况下,编译器在符号位方面的行为可能不同。在同一位字段中混合不同类型时,然后还有一堆其他的东西也定义得不好,但在现实中不太可能造成实际问题。
发布于 2020-08-10 04:46:22
x:1;}在英特尔机器上是最低有效位,但在摩托罗拉机器上是最高有效位。相比之下,(1 << 0)是所有机器上的最低有效位。我曾经不得不通过一个充满位场的8kloc视频捕获驱动程序来将它转移到另一个架构。
https://stackoverflow.com/questions/63330997
复制相似问题