编译器报告代码作曲家中的SizeOf(Unit32_T)的0
Compiler reports 0 for sizeof(unit32_t) in Code composer
我正在从事基于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)不要以为您真的想要打字后的数组。
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 同一对象的"sizeof"的不同答案
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- sizeof(size_t) 可以小于 sizeof(int) 吗?
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 为什么 sizeof(ar)/ sizeof(ar[0]) 在传递给函数时无法在向量上正常工作?
- 为什么 MSVC _count_of实现将 0 添加到 sizeof 的结果中?
- alignas() 对 sizeof() 的影响 - 强制性的?
- 在C++中,运算符 sizeof 返回什么数据类型?
- sizeof 函数如何在带和不带位字段的结构上工作?(填充)
- s.length 和 sizeof(a) 有什么区别?
- sizeof(enum) 可以不同于 sizeof(std::underlying_type<Enum>::
- 如何将数组传递给使用 sizeof 的函数?
- sizeof(size_t) 和 sizeof(ptrdiff_t) 什么时候会有所不同?
- " sizeof "操作员在编程中真的很重要吗,尤其是在构建大型应用程序时?
- 在QScopedPointer的实现中使用sizeof
- Sizeof返回的是指针大小,而不是数组大小.有其他方法可以找到尺寸吗
- 为什么sizeof函数在这里不能正常工作
- 在 T 的静态成员中使用 sizeof(T) 的 c++ 错误