首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

typedef的奇怪用法解决思路

2013-02-17 
typedef的奇怪用法#ifdef STRICTtypedef void *HANDLE#define DECLARE_HANDLE(name) struct name##__ { i

typedef的奇怪用法
#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef HANDLE *PHANDLE;


以上是摘录windws.h里的东东。

没看懂其意思, 我觉得还是我的c基础太差导致的。

解读这2句:
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ 

意思是首先 HANDLE是一个void* 类型

然后又成为了一个 结构体指针。


是不是疯了? 把两种类型定义为HANDLE.

难道可以这样使用嘛?

typedef int* pMyInt;
typedef  short* PMyInt;
这2句难道对嘛??


[解决办法]
VS2012上面STRICT是定义的. 


#ifdef STRICT
typedef void *HANDLE;
#if 0 && (_MSC_VER > 1000)
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
#else
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#endif
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef HANDLE *PHANDLE;


[解决办法]
引用:
引用:引用:引用:C/C++ code?12345678910111213141516171819202122int _tmain(int argc, char* argv[]){/*如下预编译已经在winnt.h里面了,在复制到这里没什么意义. */#……


纠正一下,typdef 语句是申明语句,不存在重复定义的说法。

热点排行