为啥微软在他们的 C++ 代码中使用了这么多宏? [关闭]

Posted

技术标签:

【中文标题】为啥微软在他们的 C++ 代码中使用了这么多宏? [关闭]【英文标题】:Why does microsoft use so many macros in their C++ code? [closed]为什么微软在他们的 C++ 代码中使用了这么多宏? [关闭] 【发布时间】:2013-03-20 18:34:10 【问题描述】:

Visual Studio 附带的 C++ 标准库实现和 Windows API(Win32 和 MFC)都包含大量宏。

例如,他们将“TRUE”和“FALSE”定义为 1 和 0。并在所有上下文中将 bool 替换为“BOOL”,它是 int 的 typedef。他们甚至没有使用三路逻辑。

还有“min”和“max”宏,可以很容易地用模板替换。

还有大量的定义只是简单地定义为“远”和“近”等。

【问题讨论】:

可能是因为它是 C 代码遗留下来的,当时这些宏是合理的。 因为它是 C,而不是 C++。 @Pubby 适用于 Windows API,但不适用于(大部分)C++ 标准库实现。 “还有大量的定义被简单地定义为诸如“远”和“近”之类的东西。” - 你需要重温你的历史。计算机并非诞生于受保护模式的 32 位 CPU 的时代,而且您不只是为了清理 API 而中断和破坏工作程序(好吧,无论如何,如果您想拥有一个忠实的开发人员群,则不是)。跨度> 您注意到的所有内容均不在 C++ 库中。它们都在 Windows 标头中,正如其他人所指出的,可以追溯到 1980 年代初期。 【参考方案1】:

大部分代码都是从 C 代码开始的,并且可以追溯到 1980 年代。如果它今天是从头开始编写的,那么您可能会期望代码看起来会有所不同。

例如,您选择BOOL 类型。早在最初构想 Windows API 时,C 中还没有布尔类型。

您提到了MINMAX 宏并提出了模板。好吧,如您所知,C 中没有模板,这些宏甚至可能早于 C++ 模板。

虽然 MFC 是一个 C++ 库,但它位于 Win32 之上,这是一个 C API。因此,MFC 的实现显然必须在其实现中使用该 C API。

【讨论】:

在大多数现代 C 代码中仍然没有布尔类型 - 因为几乎没有人使用 C99 中的 _Boolstdbool.h 好的,但是c++标准库不可能是c++之前写的? @DavidJensen:C++ 标准库与 C API 有什么关系?你的前提是错误的; Windows API 是 C,而不是 C++,API。您可能会问为什么 Windows API 不使用 C# 泛型。 @EdS。问题提到了那个图书馆。【参考方案2】:

在 Ye Olden C 时代 (MS-DOS),farnear 是指针关键字。许多这些库一开始都是用 C 编写的:因此,他们没有从头开始重新发明整个标准库,而是使用了一些已经工作的东西,并且已经相当好地工作了。

此外,Windows 本质上是一个 C API,而不是 C++ API,因此您可以预期代码中会出现很多东西(如宏、奇怪的定义等)。

【讨论】:

回复nearfar:你看到了吗:***.com/q/3869830/140719?

以上是关于为啥微软在他们的 C++ 代码中使用了这么多宏? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

与 Java 和 Python 相比,为啥每次使用 Cmake 运行 C++ 程序都需要这么长时间?

为啥vb.net用的人这么少,而C#.net用的人那么多呢?

C#和C++的区别 计算机2级为啥不包括C#

为啥 sortByKey 的火花这么慢?他们有啥替代方案吗?

微软为啥离我们越来越远?

野哥点评了FacebookAmazonGoogle微软和苹果