11

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。

性能或内存消耗有什么不同吗?

感谢帮助 :)

4

1 回答 1

21

uintn_t是由 C99 (in ) 和 C++11 (in ) 标准指定的 typedef 所有新的编译器都提供了这些,并且对于少数古老的编译器很容易获得适当的定义,因此为了可移植性,请始终使用它。<stdint.h><cstdint>

__un是早于这些标准的 Linux 特定类型定义。它们不是便携式的。双下划线用于表示非标准定义。

*对于 8、16、32 和 64,如果编译器具有该大小的类型,则应定义它们,可以定义其他类型。

于 2013-04-26T09:07:34.047 回答