游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2293|回复: 5

求教一段代码的含义

[复制链接]

10

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2008-10-9 07:57:00 | 显示全部楼层 |阅读模式
#ifndef DECLARE_HANDLE
#define DECLARE_HANDLE(name) \
struct name##__ { DWORD unused; }; \
typedef struct name##__ _far* name
#endif
求教这段代码是什么意思啊?

10

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2008-10-9 10:55:00 | 显示全部楼层

Re:求教一段代码的含义

引用百度的回答,我看有点道理,大家帮我分析下

   (name##__ _far*)是一体的,而不是一楼的回答 (struct name##__)是一体,因为struct是结构体,我的感觉就是这样:把(name##__ _far*)这个结构体类型又起了个新名字(name),typedef是用来定义类型的,例如:
typedef struct list
{
ElemType seqlist;
struct list *next;
}llist,*pllist;
这上面就是把
list
{
ElemType seqlist;
struct list *next;
}
这个结构体给重新定义成了llist这个名字,pllist是指向llist的指针。以上就是我的想法了,如果感觉不对,那就算了。

这个像是windows程序设计当中的程序,这个设计思路相当复杂,其中HANDLE值得就是“句柄”,是这门课程当中的标志性语言,*表示指针,_之类的就是为了标识罢了,因为windows程序设计当中的表示太多,为了区分,以至于要添加很多不必要的成分,如单词的首字母之类,上面的程序添加的杠杠之类的就是为了区分,不表示什么特殊的含义,这是我的观点哦,如果有出入也只是个人观点~~

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2008-10-9 20:00:00 | 显示全部楼层

Re:求教一段代码的含义

单看字面意思就是一个定义句柄的宏。

name##__  是名称。 far* 是指针的类型,现在比较少见了。

至于为什么用结构体,不太清楚。

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-10-11 00:12:00 | 显示全部楼层

Re:求教一段代码的含义

假如你知道##是什么意思,这段代码不难理解了,举个例子
DECLARE_HANDLE(xx) 相当于struct xx__ { DWORD unused; }; typedef struct xx__ _far* xx
结果是定义了一个struct xx__和它的指针类型xx
xx a相当于xx__ *a

far指针确实很少见了

10

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2008-10-14 09:00:00 | 显示全部楼层

"##" 应该没有特别含义

"##" 应该没有特别含义,我感觉应该是这样理解这句代码typedef struct name##__ _far* name 等价于
typedef struct name##__ _far  //把结构体name##__ 起了个别名_far
_far* name; //定义了一个_far类型的指针

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-10-14 14:08:00 | 显示全部楼层

Re:求教一段代码的含义

##是c++里面编译预处理的一个特殊操作符,它将前后两个符号连接成一个符号。

far指针在早期的16位系统上存在,那时候的内存是分段的,跨段操作需要far指针,现在32位的系统不需要这个。

_far不是typedef来定义的,typedef定义的是name,看看c或c++的基本资料吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 03:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表