变量定义的疑问[解决即给分]

xiaohou0701 2008-12-10 04:08:49

//这是winsock2.h里面的一个struct定义,为什么 里面的char都加上一个FAR的宏?
struct hostent {
char FAR * h_name; /* official name of host */
char FAR * FAR * h_aliases; /* alias list */
short h_addrtype; /* host address type */
short h_length; /* length of address */
char FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr h_addr_list[0] /* address, for backward compat */
};

//这个宏定义
#ifndef FAR
#ifdef _WIN32
#define FAR
#else
#define FAR _far
#endif



到底为什么要这样定义一个变量呢?好像宏里面没有定义什么具体的东西吧?有什么玄机?
...全文
143 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohou0701 2008-12-11
  • 打赏
  • 举报
回复
受教,学习了....
taodm回答得最快,给5分.
lann64 回答得很详细.给15分
toadzw 2008-12-10
  • 打赏
  • 举报
回复
up
bobye1230 2008-12-10
  • 打赏
  • 举报
回复
up一个...
zhangjundriver 2008-12-10
  • 打赏
  • 举报
回复
学习了
nullah 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
由上古时代,dos编程时期遗留下来的东西。当它不存在即可。
[/Quote]
UP
jiww03 2008-12-10
  • 打赏
  • 举报
回复
还有NEAR呢,都不用理
icesky_ff 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
由上古时代,dos编程时期遗留下来的东西。当它不存在即可。
[/Quote]
高见
lbh2001 2008-12-10
  • 打赏
  • 举报
回复
far在16位下表示远指针,32位下采用flat平坦模式,没有远指针的概念了
lann64 2008-12-10
  • 打赏
  • 举报
回复
原来16位cpu时,数据总线是16位的,地址总线是20位的。这样需要把地址分段处理,一个段内地址是16位,用一个字(word ptr)表示,可以表示64k。全部地址是20位,可以指示1M空间。
这样超过64K的地址就需要两个字来表示。所以地址就分成了near和far两种。对应到指针就有了far指针。
一般指针是16位,far指针是32位(2个字),要是看老的技术资料,还可以看到内存地址会写成 B800:0001这样,就是段地址:段内地址的表示方式。
lgccaa 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
由上古时代,dos编程时期遗留下来的东西。当它不存在即可。
[/Quote]
lc19890326 2008-12-10
  • 打赏
  • 举报
回复
保证兼容性的东西 不要理会就好了
gql1123 2008-12-10
  • 打赏
  • 举报
回复
up
yuwei2589 2008-12-10
  • 打赏
  • 举报
回复
在现在已经没有什么具体的涵义了
taodm 2008-12-10
  • 打赏
  • 举报
回复
由上古时代,dos编程时期遗留下来的东西。当它不存在即可。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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