__u8和uint8_t之间的区别

时间:2013-04-26 09:03:10

标签: c++ types stdint

有人可以解释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。

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

感谢您的帮助:)

1 个答案:

答案 0 :(得分:16)

uintn_t是由C99(在<stdint.h>)和C ++ 11(在<cstdint>)标准中指定的 * 的typedef。所有新编译器都提供这些,并且很容易为少数古代编译器提供合适的定义,因此为了便携性,请始终使用它。

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

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