有人可以解释uint8_t
和__u8
类型之间的差异吗?
我知道uint8_t
是在stdint.h中定义的,并且它们在每个unix系统上都可用。
/* Unsigned. */
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
...
如果我使用它们,我可以识别它的意图。
现在我偶然发现了__u8
和__u16
类型。对我来说似乎是一样的。
其中一些类型在linux / types.h中定义
#ifdef __CHECKER__
#define __bitwise__ __attribute__((bitwise))
#else
#define __bitwise__
#endif
#ifdef __CHECK_ENDIAN__
#define __bitwise __bitwise__
#else
#define __bitwise
#endif
typedef __u16 __bitwise __le16;
typedef __u16 __bitwise __be16;
typedef __u32 __bitwise __le32;
...
我没找到__u8
但我仍然可以使用它,它的行为就像uint8_t。
性能或内存消耗有什么不同吗?
感谢您的帮助:)
答案 0 :(得分:16)
uintn_t
是由C99(在<stdint.h>
)和C ++ 11(在<cstdint>
)标准中指定的 * 的typedef。所有新编译器都提供这些,并且很容易为少数古代编译器提供合适的定义,因此为了便携性,请始终使用它。
__un
是特定于Linux的typedef,早于这些标准。它们不便携。双下划线用于表示非标准定义。
* 对于8,16,32和64,它们应定义如果编译器具有该大小的类型,则可以定义其他类型。