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

3
我正在阅读有关引导加载程序的文章,(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编译毫无疑问。


作者将 char 声明为 bool 类型,因为他(或她)是个傻瓜。 - DwB
2
@DwB:这段代码来自20世纪下半叶,在bool出现之前。 - MSalters
3个回答

4
在分段架构计算机中,far指针是一个包含段选择器的指针,使其能够指向当前段之外的地址。
你可以在这里找到更多信息。实际上,上述定义是从维基百科抄袭来的 :)
编辑:似乎类似问题已经在stackoverflow中得到回答。

2

这是一个远指针:它可以比普通指针更长(即占用更多位)。

它用于引用无法通过普通指针寻址的内存单元(例如,如果您系统上的指针由8位组成,则最多只能引用2^8个内存单元;如果您需要寻址更多内存,则可以使用远指针)。


谢谢,"typedef char bool"怎么翻译? - Neomex
1
这是一个错误,因为在C++中bool是一种内置类型。那个typedef通常可以在旧的C代码中找到,因为在那里bool不是一种内置类型。 - peoro

0

这段代码使用了Microsoft Visual Studio 1.52,在16位系统上运行。那是C++的早期,实现并不十分符合标准。事实上,当时甚至还没有真正的标准。

因此,他将bool定义为char类型,因为那个C++编译器没有内置bool类型,而他需要一个。

far表示 far pointer,它由段选择器和偏移量组成,因此您可以指向超出“正常”指针可寻址的64k内存范围之外的内容。如今你几乎看不到这样的东西了,因为现在通常使用平面地址空间,并且仍然需要关注X86处理器的分段内存模型的部分(在操作系统或引导加载程序中)通常以汇编语言编写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接