Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 原因:#1546-D:(ULP 15.1)检测到连续的位字段分配。建议改用位掩码_C - Fatal编程技术网

C 原因:#1546-D:(ULP 15.1)检测到连续的位字段分配。建议改用位掩码

C 原因:#1546-D:(ULP 15.1)检测到连续的位字段分配。建议改用位掩码,c,C,我正在使用CCS8,使用结构并初始化变量,如下面的代码所示。CCS在第15行、第16行和第17行给了我如下评论: #1546-D:(ULP 15.1)检测到连续的位字段分配。建议改用位掩码 我真的不明白在这种情况下使用位掩码会有什么好处。我假设这句话是一个更一般的东西,它只在奇怪的边缘情况下起作用(?)这个理论有点支持 所附代码: #include <msp430.h> typedef struct { unsigned char var1; unsigned in

我正在使用CCS8,使用结构并初始化变量,如下面的代码所示。CCS在第15行、第16行和第17行给了我如下评论:

#1546-D:(ULP 15.1)检测到连续的位字段分配。建议改用位掩码

我真的不明白在这种情况下使用位掩码会有什么好处。我假设这句话是一个更一般的东西,它只在奇怪的边缘情况下起作用(?)这个理论有点支持

所附代码:

#include <msp430.h>

typedef struct
{
    unsigned char var1;
    unsigned int var2;
    unsigned char var3;
    unsigned char var4;
} Test;

void main ( void )
{
    Test BOB;
    BOB.var1 = 1;
    BOB.var2 = 1;
    BOB.var3 = 3;
    BOB.var4 = 1;
}
#包括
类型定义结构
{
无符号字符var1;
无符号int-var2;
无符号字符var3;
无符号字符var4;
}试验;
真空总管(真空)
{
测试鲍勃;
BOB.var1=1;
BOB.var2=1;
BOB.var3=3;
BOB.var4=1;
}
我真的很想理解这句话,这样我就可以相应地改变我的编码习惯,如果这样可以防止将来可能出现的问题的话


预先感谢任何反馈/答案。

< P>强>编辑:< /强>我确信这是一个错误,你应该认为它是错误的。请参阅底部的链接

我在你粘贴的代码中看不到任何位字段

如果代码看起来像这样,那就有意义了:


struct s
{
  char a : 4;
  char b : 4;
};

int main()
{
  struct s S;
  S.a = 0;
  S.b = 0;

  return 0;
}
我在TI的论坛上注意到这些关于同一警告的看似误报的报道:


我知道它们很旧,但除非您使用的是最新版本的CCS,否则这可能是误报?

正确,我没有使用位字段。您可能也对了,这句话是由软件中的错误引起的。然而,我想知道为什么这会是一个问题,例如在你的例子。赋值高于指定的位字段会导致“溢出”到另一个有效位字段吗?例如:```字符a:4;字符b:4;s、 a=21;//0001 101 s.b=8;//0000 1000//1001 101 Hi@Bassrelic-您的示例不会导致溢出。兼容编译器应屏蔽其他字段,以便分配给一个字段不会溢出到其他字段。我编写的代码只是为了展示bif字段,以防您不熟悉它们——这本身并没有什么问题。位字段的“问题”是有关位字段的一些细节是由实现定义的。看,我很确定这是TI软件中的一个bug,但检查这些细节总是一个好主意。例如,查看C中未定义行为的非穷尽列表(附录J2):感谢@Morten Jensen的澄清+非常有趣的链接!非常感谢!你是对的——这个附录读起来有点吓人,但由于我甚至不知道这个附录确实存在,所以知道一个检查行为的来源对我来说很好,我自己也不确定。再次感谢,这回答了我的问题!有未解决的问题,所以我认为这是一个错误。