может кто-нибудь объяснить разницу между типами 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.
есть ли разница в производительности или потреблении памяти?
Спасибо за помощь 🙂
uintn_t
указываются typedefs* по С99 (в <stdint.h>
) и C ++ 11 (в <cstdint>
) стандарты. Все новые компиляторы предоставляют их, и определение подходящего легко получить для немногих древних, поэтому для переносимости всегда используйте это.
__un
специфичные для Linux определения типов, предшествующие этим стандартам. Они не портативны. Двойное подчеркивание используется для обозначения нестандартного определения.
* Для 8, 16, 32 и 64 они должны быть определены если у компилятора есть тип такого размера, могут быть определены дополнительные.
Других решений пока нет …