C++中使用typedef定义的UNIT_PTR,LONG_PTR等

在看代码时,发现有用到WPARAM, LPARAM, LRESULT

我去找它们的定义,发现在C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h 中,有如下定义

/* Types use for passing & returning polymorphic values */
typedef UINT_PTR            WPARAM;
typedef LONG_PTR            LPARAM;
typedef LONG_PTR            LRESULT;

我于是又去看UINT_PTR, LONG_PTR, LONG_PTR的定义

发现在C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\basetsd.h中有如下代码

    typedef _W64 int INT_PTR, *PINT_PTR;
    typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;

    typedef _W64 long LONG_PTR, *PLONG_PTR;
    typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;

我们来理解上面4行语句,上面4行语句基本上是一个样式. 我们只需要理解其中一行就可以了。我们拿第一行来举例:

typedef _W64 int INT_PTR, *PINT_PTR;  
这里 _W64是编译选项,在64位编译器下, ,而且打开了/Wp64编译选项时,编译器会对使用了__w64的类型进行32位到64位移植性的判断 => 具体好像也不是很懂...
我们重点看这个:
typedef int INT_PTR, *PINT_PTR;  分为2句:
typedef int INT_PTR => 这里就是为int类型取了一个别名 INT_PTR, 所以这里 INT_PTR就是代表int =》使用 INT_PTR b; b =1;
typedef int *PINT_PTR => 就是为int *,也就是int类型的指针,取了一个别名 PINT_PTR, 所以,这里PINT_PTR就是代表int类型的指针 => 使用 int x = 8; PINT_PTR y = &x;

 

posted on 2023-07-05 17:20  新西兰程序员  阅读(192)  评论(0编辑  收藏  举报