我是一名正在进行分配的学生,需要在C中使用不同的数据类型。我们的代码必须是可移植的,因此使用sizeof非常重要。我们还建议我们进行自己的转换,以便独立于编译器。我的问题是如何针对sizeof正确地转换多个数据类型,返回size_t这是一个无符号整数值?
下面看起来很奇怪,但我只是将字符转换为字节,因为它是在不同的架构上编译的,其中char可能大于/小于1个字节。
short amountOfBytes;
char b = 10;
amountOfBytes+=(short)((unsigned int)b*sizeof(char));
我这样做了吗?这是另一个例子:
short a, b = 200;
a = (short)(((unsigned int)b+1) * sizeof(char));
最后一个问题,通过size_t施放是更好的做法还是我应该坚持使用unsigned int?
答案 0 :(得分:0)
您的代码可以调用签名类型溢出,这不是已定义的操作。因此代码是错误的。
同样sizeof(char)
定义为1
。然而,这并不意味着8位。请参阅CHAR_BIT
。