“const char far * inStrSource”是什么意思?

时间:2011-01-24 13:42:35

标签: c++ operating-system

我正在关注启动加载器的文章,
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进行编译无疑是有效的。

3 个答案:

答案 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或引导程序中)通常用汇编语言编写