It is possible that the definition is intended for compatibility with DOS.
#ifdef DOS #define _PTR_ far * #else #define _PTR_ * #endif
The far / near keywords allow pointers to address memory inside / outside the current segment, which allows programs to address more than 64 kilobytes of memory, while preserving the benefits of 16-bit pointers for faster code usage / less memory.
It is more typical to exclude * from the definition. For example, in LibPNG you can see definitions such as:
typedef png_color FAR * png_colorp; typedef png_color FAR * FAR * png_colorpp;
On most far platforms, there will be #defined nothing.
Although DOS is long gone, some modern embedded architectures have similar problems. For Harvard architecture processors, program and data pointers must be accessible using different instructions, so they are of different types. Other processors have different "data models", and special types of pointers for pointers below 2 ^ 24, 2 ^ 16 or 2 ^ 8 are not uncommon.
source share