Windows代码规则

初次接触Windows编程,发现代码通篇都是奇奇怪怪的东西。像DWORD_PTRDWORD_PTR这些东西,让人很是迷惑。本来入门还算容易,结果因为这些奇奇怪怪的东西,生生拖延了很多时间。看起来实在费劲。故需先跟他们混个眼儿熟,以便他们奇怪的外形不至于让开发者看着眼晕。文章内容很多都参考了官方文档,若有翻译不准确的请温柔地指出。

先来看下这群奇怪的东西分别所占的位数。

BYTE 8 bits Unsigned
DWORD 32 bits Unsigned
INT32 32 bits Signed
INT64 64 bits Signed
LONG 32 bits Signed
LONGLONG 64 bits Signed
UINT32 32 bits Unsigned
UINT64 64 bits Unsigned
ULONG 32 bits Unsigned
ULONGLONG 64 bits Unsigned
WORD 16 bits Unsigned

他们的值其实都是整型数值,size是固定的,不管是在32位机上还是64位计算机上,大小都不变。

BOOL类型

BOOL是用在Boolean环境中的整型数值。0代表false,1代表true。

#define FALSE    0 
#define TRUE     1

事实上,任何非0数值都能表示true,很多方法返回的bool类型,但返回值可能不1,所代表含义也是true。所以不能简单地判断方法返回值是否为TRUE。

以下的写法是正确的。

// Right way.
BOOL result = SomeFunctionThatReturnsBoolean();
if (result) 
{ 
    ...
}

以下的写法是错误的。

// Wrong!
if (result == TRUE) 
{
    ... 
}

需要注意的是,BOOL是整型,不同于C++中的bool类型。

指针类型

Windows中有很多以P或LP为前缀的类型,例如LPRECT,是RECT类型的指针,而RECT是描述矩形的结构体。

RECT*  rect;  // Pointer to a RECT structure.
LPRECT rect;  // The same
PRECT  rect;  // Also the same.

P和LP在以前是有区别的,如今没什么区别。都代表指针。

有精度的指针类型

以下数据类型的size取决于编译环境,在32位机上是32位,在64位机上是64位。32位的应用运行在64位机上,其类型还是4字节,但64位的应用不能再32位的环境中运行。

  • DWORD_PTR
  • INT_PTR
  • LONG_PTR
  • ULONG_PTR
  • UINT_PTR

以上用适用于需要整型类型指针的情况。他们用于为指针算法定义变量,定义循环计数器来遍历缓存中的所有字节。通常情况下,他们出现在64位操作系统中将现有32位扩展为64位的地方。

匈牙利标记法

此法在定义变量名的时候加前缀来表示额外的信息。有的告诉你变量的类型,也有的表示语义信息,告诉你变量的预期用途。

例如 i 表示  index ,cb表示字节数, rw表示行,col表示列。如果你看到一个表达式是rwPosition + cbTable,便可怀疑这是一个错误,因为行的位置不能和字节数相加,逻辑上没有意义。

Windows编程中很多都用匈牙利表示法,所以需要了解一下。

你可能感兴趣的:(c++)