_WIN32, __linux__... 预处理器宏如何工作?

How _WIN32, __linux__... preprocessor macro work?

像 GCC 这样的 C 编译器如何定义预处理器宏来检测当前 OS?

我查看了 GCC 的源代码并找到了 this builtin_define ("_WIN32"); 但我不确定这是否是定义宏的地方。

TL;DR:基本上是的。内置宏在目标描述头文件中定义。

经常有一本精美的手册可供阅读;在本例中,它是 GCC internals manual. (Specifically, in the section on Run-time target specification,但不要从那里开始阅读;你需要一些上下文。)

有一个 complete compendium of GCC documentation 以供您需要更多信息。 (内部文档位于该页面的底部。)

(如果您习惯使用 GNU 信息 reader 并且您使用的是 Ubuntu/Debian 系统,则可以使用 sudo apt-get install gcc-doc 安装当前 GCC 版本的 GCC 文档; 包括 GCC 内部文档。)