typedef void far * XMSDRIVER;
// 編譯錯誤: 在 * 處提示 "應輸入;" (Error C2143)
#ifndef FAR
#ifdef NEED_FAR_POINTERS
#define FAR far
#else
#define FAR
#endif
#endif
// 修正宏定義
#ifndef FAR
#define FAR far // 或根據平台定義
#endif
// 代碼中使用大寫宏
typedef void FAR * XMSDRIVER; // 正確:展開為 typedef void far * XMSDRIVER;
// 現代 32/64 位平台指針默認即為「遠」 (平坦內存模型)
#define FAR // 定義為空
typedef void FAR * XMSDRIVER; // 展開為 typedef void * XMSDRIVER;
// 等價於
typedef void * XMSDRIVER;
#include
// 若 XMSDRIVER 實際是通用指針
using XMSDRIVER = void*;
// 或 uintptr_t 用於指針算術/存儲
using XMSDRIVER = uintptr_t;
// 測試代碼
#include
#define FAR // 現代編譯器定義為空
typedef void FAR * XMSDRIVER;
int main() {
XMSDRIVER ptr = nullptr;
std::cout << "XMSDRIVER size: " << sizeof(ptr) << " bytes\n"; // 64位輸出 8
return 0;
}
VS2012 編譯 `typedef void far *` 報錯「應輸入;」的根因是 `far` (小寫) 未被定義,導致編譯器誤解析語法。解決方法:宏名稱統一大寫 `FAR` 並在代碼中使用 `FAR`,或現代編譯器直接定義 `FAR` 為空移除遠指針關鍵字。16 位時代的 `far`/`near`/`huge` 在現代平台已無意義,應清理遺留代碼。