【问题标题】:What does "const char far* inStrSource" mean?“const char far* inStrSource”是什么意思?
【发布时间】:2011-01-24 13:42:34
【问题描述】:

我正在关注有关引导加载程序的文章,
(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:代码来自20世纪下半叶,在bool存在之前。

标签: c++ operating-system


【解决方案1】:

在分段架构计算机中,远指针是包含段选择器的指针,可以指向当前段之外的地址。

您可以找到更多here。实际上,上面的定义是从维基百科窃取的:)

编辑:stackoverflow 似乎已经回答了类似的问题。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,“typedef char bool”呢?
    • 这是一个错误,因为在 C++ 中 bool 是一个内置类型。 typedef 经常出现在旧的 C 代码中,因为 bool 不是那里的内置类型。
    【解决方案3】:

    此代码使用 Microsoft Visual Studio 1.52 制作,适用于 16 位系统。那是 C++ 的早期阶段,实现并不是非常符合标准。甚至没有任何标准。

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 2015-02-01
      • 2018-08-04
      • 2018-01-06
      • 1970-01-01
      • 2017-02-23
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多