Вполне возможно, что определение для совместимости с 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 давно прошло, некоторые современные встроенные архитектуры имеют схожие проблемы. Для процессоров архитектуры Harvard, указатели на программу и память данных должны быть доступны с использованием разных инструкций, поэтому они имеют разные типы. Другие процессоры имеют разные «модели данных», и нет ничего необычного в том, чтобы видеть специальные типы указателей для указателей ниже 2^24, 2^16 или 2^8.
Хороший вопрос. Мне действительно интересно узнать, есть ли у кого-то хороший ответ на этот вопрос. Вы видите '__PTR__ __PTR__' для двойного обращения? : S –
lol ... может быть, программист, который придумал это, имел проблемы со зрением и трудности в распознавании маленьких звездочек в середине всех остальных символов, присутствующих в типичном исходном файле. – pmg
@ Майкл Миор Ха-ха - есть :) – pmod