2011-01-24 9 views
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; 
} 

"const char far* inStrSource" 

全部char型をboolと定義し、このポインタのもので何が起こっていますか?

MVC++ 10はそれらをエラー(typedef char bool、char far * intSource)として認識しますが、16bit VC 1.52でコンパイルすることは間違いありません。

+0

著者は、彼(または彼女)がgoofballであるため、boolとしてcharをtypdef'ingしています。 – DwB

+2

@DwB:コードは 'bool'が存在する前の20世紀後半からのものです。 – MSalters

答えて

2

far pointer普通のポインターより長い(つまり、より多くのビットを取ることができる)ポインターです。

これは、通常のポインタではアドレス指定できなかったメモリセルを参照するために使用されます(つまり、システム上のポインタが8ビットの場合、最大2^8メモリセルしか参照できません。あなたはfarポインタを使用することができるより多くのメモリ)。

+0

ありがとう、 "typedef char bool"はどうですか? – Neomex

+1

C++では 'bool'は組み込み型なので、エラーです。そのtypedefは、 'bool'は組み込みの型ではないので、しばしば古いCコードで見つかっていました。 – peoro

+0

申し訳ありません、ありがとうございました。 – Neomex

4

セグメント化されたアーキテクチャのコンピュータでは、farポインタはセグメントセレクタを含むポインタであり、現在のセグメント外のアドレスを指すことができます。

さらにhereを見つけることができます。実際には、上記の定義はWikipediaから盗まれています:)

EDIT:すでに同様の質問がstackoverflowで返っているようです。

0

このコードは、16ビットシステム用のMicrosoft Visual Studio 1.52で作成されています。これはC++の初期段階ですが、実装は実際にはあまり標準に準拠していませんでした。実際には何の基準もなかった。

したがって、C++コンパイラにはbool型が組み込まれておらず、char型が必要です。

farは、セグメントセレクタとオフセットからなるポインタであるfar pointerを示します。したがって、通常のポインタが扱える通常の64kメモリ以外のものを指すことができます。一般的に使用されているフラットなアドレス空間として、今日のようなものはほとんど見当たりません。また、X86プロセッサのセグメント化されたメモリモデルを気にする必要のある部分は、しばしばアセンブリで書かれます。

関連する問題