$ cc -dM -E - < /dev/null | grep WIN32 137:#define __WIN32__ 1 183:#define _WIN32 1 301:#define WIN32 1 325:#define __WIN32 1
Yes, gcc and clang both defines those macros which are not official or documented by Microsoft. Those are probably for compatibility with ancient code. Android has similar issue about `ANDROID` vs `__ANDROID__` but the later one should be used according to documentation.