Search code examples
winapiplatform-sdk

What's with "#ifdef _MAC" in Windows header files?


I was browsing through Windows's Platform SDK header files (what a life, right?), and I noticed many places contained references to the preprocessor symbol _MAC. For example:

// WinUser.h line 1568
/*
 * Message structure
 */
typedef struct tagMSG {
    HWND        hwnd;
    UINT        message;
    WPARAM      wParam;
    LPARAM      lParam;
    DWORD       time;
    POINT       pt;
#ifdef _MAC
    DWORD       lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;

Does this mean "Macintosh", as it appears? Was there a time where Windows or a subset of Windows could be compiled for the Macintosh?


Solution

  • At one time Microsoft was the largest developer of Macintosh software in the world. Excel and Word dominated their respective markets on the Macintosh, and later so did Office. So it's not that surprising that the applications division at MS would want a subset of the Windows header files that worked on the MAC - to make their cross platform software easier to maintain.

    But there was never any version of the Windows OS that ran on the Macintosh.

    In any case, this fragment is from objidl.h, seems to indicate that _MAC does indeed mean Macintosh in the header files though...

    //FSSpec is Macintosh only, defined in macos\files.h
    #ifdef _MAC
        typedef struct tagSTATSTG
        {                      
            LPOLESTR pwcsName;
                FSSpec *pspec;
            DWORD type;
            ULARGE_INTEGER cbSize;
    ...
        } STATSTG;
    #else //_MAC