Raymond Chen 回答读者提问,解释 WIN32_LEAN_AND_MEAN 的来历。这个宏出现在 Windows 95 时期,作用是在包含 windows.h 时排除一大批 Windows 头文件。它诞生于 16 位 Windows 向 32 位迁移的过程:16 位的 windows.h 并不包含那些头文件,而定义这个宏就回到了 16 位时代「写一个最简 Windows 程序只需要最少的头文件」的哲学。这既安抚了喜欢精细管理头文件的程序员,也在当时帮了大忙——因为预编译头文件尚不普及。作者回忆,在一台 50MHz 的 80486、8MB 内存的机器上,改用这个宏能让每个 C 文件的编译时间缩短三秒;若项目有 20 个 C 文件,一下就省下一分钟。不过摩尔定律与预编译头文件共同让这个宏变得基本无用了:如今它并不能真的省下多少时间,但在某个时期,它确实可以。
🔑 核心要点
宏的定位:在包含 windows.h 时排除一大批 Windows 头文件,出现于 Windows 95 时期
历史成因是 16 位到 32 位 Windows 的迁移:16 位的 windows.h 本来就不含那些头文件
它相当于让 32 位回到 16 位的哲学:写最简 Windows 程序只需要最小的一组头文件
当时的现实收益很大,因为预编译头文件还不普及
量化的收益:50MHz 80486 与 8MB 内存上,每个 C 文件编译省下三秒,20 个文件就是整整一分钟
结局是它基本失去意义:摩尔定律与预编译头文件共同让它不再省时间,但在某个时期它确实管用
💡 金句
在引入这个符号的那个年代,预编译头文件还不普及。据我回忆,在一台 50MHz 的 80486、8MB 内存的机器上,改用 WIN32_LEAN_AND_MEAN 能让每个 C 文件的编译时间缩短三秒。