将`-1`转换为unsignedint是一种很好的代码风格吗?

强制转换-1为 unsigned int是一种很好的代码风格吗?例如:

#define MAX_UINT8 ((uint8_t) -1)

比较

#define MAX_UINT8 0xff

回答

风格和实用性

强制转换-1为 unsigned int是一种很好的代码风格吗?

不是在编码最大值时 uint8_t。来自@MikeCAT 的
使用UINT8_MAXinttypes.h

#define MAX_UINT8 0xff可以用于预处理器操作。不要依赖带有预处理器数学的强制转换。因此#define MAX_UINT8 ((uint8_t) -1)#define MAX_UINT8 0xff

尝试

#include <stdint.h>
#define MAX_UINT8 ((uint8_t) -1)

#if MAX_UINT8 < 0
#error "MAX_UINT8 < 0"
#endif

类型差异

((uint8_t) -1)通常是类型unsigned charuint8_t是一个可选的类型1,但非常普遍地实现。

0xff是类型int

使用一个或另一个会导致与_Generic和不同sizeof


1uintN_t

这些类型是可选的。但是,如果实现提供宽度为 8、16、32 或 64 位、无填充位且(对于有符号类型)具有二进制补码表示的整数类型,则应定义相应的 typedef 名称。
C17dr § 7.20.1.1 3


以上是将`-1`转换为unsignedint是一种很好的代码风格吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>