MyException - 我的异常网
当前位置:我的异常网» C++ » typedef的奇怪用法解决思路

typedef的奇怪用法解决思路

www.MyException.Cn  网友分享于:2013-02-18  浏览:3次
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句难道对嘛??


------解决方案--------------------
这句是一个宏, 宏的名字是DECLARE_HANDLE, 和HANDLE没有半毛钱关系, 这个宏接受一个参数 name, 构造一个动态的结构
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
// 假设你代码为
DECLARE_HANDLE(CSDN); 
// 自动扩展为
struct nameCSDN__ { int unused; }; 
typedef struct nameCSDN__ *name;


就是这样.
------解决方案--------------------
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 语句是申明语句,不存在重复定义的说法。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有