我想了解一下,定义BYTE
,WORD
和DWORD
宏的最佳方法是什么,这些是在question的答案中提到的。
#define LOWORD(l) ((WORD)(l)) #define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF)) #define LOBYTE(w) ((BYTE)(w)) #define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
假设,那是正确的:
BYTE
是宏定义为
#define BYTE __uint8_t
WORD
是宏定义为
#define BYTE __uint16_t
DWORD
是宏定义为
#define BYTE __uint32_t
如果是,为什么要转换为另一个宏而不是转换为__uint8_t
,__uint16_t
或__uint32_t
?这样写是为了提高清晰度吗?
我还发现了另一个question,答案包括typedef
,还有更多的研究我找到了question about comparing #define
and typedef
的答案。在这种情况下typedef
会更好用吗?
答案 0 :(得分:5)
这是一种便携式解决方案:
#include <stdint.h>
typedef uint32_t DWORD; // DWORD = unsigned 32 bit value
typedef uint16_t WORD; // WORD = unsigned 16 bit value
typedef uint8_t BYTE; // BYTE = unsigned 8 bit value
答案 1 :(得分:1)
您已在https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx定义了它,并且已在WinAPI的Windows数据类型标头中定义:
typedef unsigned short WORD;
typedef unsigned char BYTE;
typedef unsigned long DWORD;
它是一种类型,而不是宏。