这几句怎么理解呀,帮忙呀!

jackshow 2004-08-24 09:57:33
#if defined (TARGET_32BIT)
# define __far
#endif

/*----- basic-type definitions -----*/
typedef unsigned char __far *CAPI_MESSAGE;
typedef CAPI_MESSAGE _cstruct;

unsigned __far CAPI_CMSG_2_MESSAGE (_cmsg __far *cmsg, CAPI_MESSAGE msg);


typedef unsigned char __far *CAPI_MESSAGE; 这句到底是什么意思?有什么用?
...全文
118 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwertasdfg123 2004-08-24
  • 打赏
  • 举报
回复
如果不用__far,那怎么定义呢?
////////////////////////////////
定义宏TARGET_32BIT。

#define TARGET_32BIT
jackshow 2004-08-24
  • 打赏
  • 举报
回复
^_^,明白了,多谢!
waini11 2004-08-24
  • 打赏
  • 举报
回复
哦 明白了 原来_far是这个意思呀
jackshow 2004-08-24
  • 打赏
  • 举报
回复
如果不用__far,那怎么定义呢?
短歌如风 2004-08-24
  • 打赏
  • 举报
回复
typedef unsigned char __far *CAPI_MESSAGE

这句话是定义了一个类型CAPI_MESSAGE——指向无符号字符(串)的远指针。由于在32位程序中已经不使用远指针了,所以在开始有一个条件编译,当TARGET_32BIT已定义时把__far定义为空,这时就相当于:

typedef unsigned char *CAPI_MESSAGE

__far是一个非标准关键字,用于16位代码编译器,表明指针是一个32位远指针,或者函数是一个远调用。在32位系统中(x86机器上)——与16位代码不同,近指针是32位的,而远指针是48位的——编译器一般不支持使用远指针,这个关键字已经没有用处了。
pacman2000 2004-08-24
  • 打赏
  • 举报
回复
你用的是32位的系统吧? 如果是的话,就定义下宏TARGET_32BIT
__far是很久以前dos时代说明远指针的。windows95以后就不用了。
jackshow 2004-08-24
  • 打赏
  • 举报
回复
typedef unsigned char __far *CAPI_MESSAGE;
但是编译器过不去,提示
syntax error before `*' token
语法错误
waini11 2004-08-24
  • 打赏
  • 举报
回复
还是没听明白楼上的话 能否更详细的说说
qwertasdfg123 2004-08-24
  • 打赏
  • 举报
回复

给unsigned char __far *定义一个别名CAPI_MESSAGE。

如果定义了TARGET_32BIT,那么就是
给unsigned char *定义一个别名CAPI_MESSAGE。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧