我正在关注启动加载器的文章,
(http://www.codeproject.com/KB/tips/boot-loader.aspx?msg=3745692#xx3745692xx)
我找到了这个部分:
"const char far* inStrSource"
整件事:
typedef unsigned char byte;
typedef unsigned short word;
typedef unsigned long dword;
typedef char bool;
byte CString::Strlen( const char far* inStrSource )
{
byte lenghtOfString = 0;
while(*inStrSource++ != '\0')
{
++lenghtOfString;
}
return lenghtOfString;
}
有人可以解释一下,为什么他将char类型定义为bool,以及这个指针的内容是什么?
MVC ++ 10将这些视为错误(typedef char bool和char far * intSource),但是使用16位VC 1.52进行编译无疑是有效的。
答案 0 :(得分:4)
在分段架构计算机中,far指针是一个包含段选择器的指针,可以指向当前段之外的地址。
您可以找到更多here。实际上,以上定义是从维基百科中窃取的:)
编辑:stackoverflow似乎已经回答了类似的问题。
答案 1 :(得分:2)
这是一个far pointer:一个指针,它可以比普通指针更长(即:占用更多位)。
它用于引用无法通过普通指针寻址的存储单元(即:如果系统上的指针由8位组成,则最多只能引用2 ^ 8个存储单元;如果需要更多地寻址记忆你可以使用远指针)。
答案 2 :(得分:0)
此代码由Microsoft Visual Studio 1.52制作,适用于16位系统。那是C ++的早期阶段,实现并不是非常标准的符合。甚至没有任何标准。
所以,他将bool定义为char,因为C ++编译器没有内置的bool类型,他想要一个。
far
表示far pointer,它是一个由段选择器和偏移量组成的指针,因此您可以指向“正常”指针可以解决的正常64k内存之外的内容。你现在几乎看不到这样的东西,如果是常用的平面地址空间,那些仍然需要关心X86处理器的分段内存模型的部分(在OS或引导程序中)通常用汇编语言编写