编译器报告代码作曲家中的SizeOf(Unit32_T)的0

Compiler reports 0 for sizeof(unit32_t) in Code composer

本文关键字:Unit32 SizeOf 报告 代码 作曲家 编译器      更新时间:2023-10-16

我正在从事基于C 的项目,在该项目中,我在以下语句中遇到一个错误:

代码:

typedef char pb_static_assertion_UINT32_T_WRONG_SIZE3507__COUNTER__ 
[ ( sizeof ( uint32_t ) == 4 ) ? 1 : - 1 ] ;   // The line giving error

错误:

"C:UserstkumarDocumentsLDRALDRAunit_C_CPP_9.7.1trialinszt_algctivationgateway.cpp", 
line 4330: error #95: the size of an array must be greater than zero"

参考:UINT32_T使用:

定义
typedef unsigned long uint32_t;

我怀疑无签名的长身,这里有人要解释一下这个错误背后的原因?

C2000体系结构上最小的可寻址单元(即" char")为16位。

如今,这有点不寻常,但是允许。C允许过去和未来的各种有趣的CPU体系结构实际上不需要" char"。是8位。" char"可以是9、10、11,甚至是16位,例如C2000。

对于C2000 C编译器,sizeof(char)= 1,char为16位。现在您可以看到为什么要保持一致,sizeof(uint32_t)= 2

如果有帮助,您可以将C2000视为具有16位字节的。因此,这些大字节中的两个是32位值。它确实在C2000上使用第三方C库制作有点棘手,因为大多数人都认为UINT8_T可用。

我已经看到了一些库typedef a uint8_t实际上是uint16_t,但这只是隐藏了问题。请避免。那些伪造的" uint8_t"可以拥有超过255的值,这是代码的坏消息,该代码假设它会缠绕!

这里有很棒的写作(不是我的):https://faehnri.ch/byte-not-8-bits/

1)代码 - 代码组合编译器以称为coff或eabi的格式输出对象。选择COFF时,至少对于某些微处理器而言,未签名的长度为40位。当选择EABI时,它是32位。2)对于某些Ti微处理器,例如C2000系列,最小的可寻址单词为16位,然后SizeOf将输出2而不是4对于32位类型。3)其中一个或另一个可能导致您的sizeof语句返回4以外的东西,从而导致?:选择-1。因此阵列大小小于0。4)不要以为您真的想要打字后的数组。