将`-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 char。 uint8_t是一个可选的类型1,但非常普遍地实现。
0xff是类型int。
使用一个或另一个会导致与_Generic和不同sizeof。
1uintN_t
这些类型是可选的。但是,如果实现提供宽度为 8、16、32 或 64 位、无填充位且(对于有符号类型)具有二进制补码表示的整数类型,则应定义相应的 typedef 名称。
C17dr § 7.20.1.1 3