DOSとの互換性のための定義である可能性があります。
#ifdef DOS
#define _PTR_ far *
#else
#define _PTR_ *
#endif
far
/キーワードを使用near
すると、ポインタが現在のセグメントの内側/外側のメモリをアドレス指定できるため、プログラムは64 KiBを超えるメモリをアドレス指定できると同時に、16ビットポインタの利点を維持してコードを高速化し、メモリ使用量を減らすことができます。
*
定義から除外するのがより一般的です。たとえば、LibPNGでは、次のような定義を確認できます。
typedef png_color FAR * png_colorp;
typedef png_color FAR * FAR * png_colorpp;
ほとんどのプラットフォームでFAR
は#defined
、何もありません。
DOSは古くからありますが、一部の最新の組み込みアーキテクチャにも同様の問題があります。ハーバードアーキテクチャプロセッサの場合、プログラムとデータメモリへのポインタは異なる命令を使用してアクセスする必要があるため、それらは異なるタイプになります。他のプロセッサには異なる「データモデル」があり、2 ^ 24、2 ^ 16、または2^8未満のポインタに特別なポインタタイプが表示されることは珍しくありません。