我在我的系统的标准 C++ 库以及我正在使用的库中的一些标头中看到了这一点。
这两个定义的语义是什么? 除了源本身之外,还有像这样的 #define 的很好的参考吗?
__STDC_LIMIT_MACROS
和 __STDC_CONSTANT_MACROS
是一种解决方法,允许 C++ 程序使用 C99 标准中指定但不在 C++ 标准中的 stdint.h
宏。宏(例如 UINT8_MAX
、INT64_MIN
和 INT32_C()
)可能已在 C++ 应用程序中以其他方式定义。为了允许用户决定是否需要像 C99 那样定义宏,许多实现要求在包含 __STDC_LIMIT_MACROS
之前定义 __STDC_CONSTANT_MACROS
和 stdint.h
。
这不是 C++ 标准的一部分,但它已被多个实现采用。
上述问题已经消失。 C99 是一个旧标准,因此这在 C++11 标准中已被明确否决,因此 C11 删除了此规则。
更多详细信息:
在C++下的
stdint.h
中,它们控制是否定义像INT32_MAX
或INT32_C(v)
这样的宏。请参阅您平台的 stdint.h
了解更多信息。
有一个关于 Visual Studio 2022 中未定义 PTRDIFF_MAX 的 MSVC 错误查询。今天从 VS 2019 迁移到 VS 2022 时,我遇到了同样的错误。 我发现在 #include
这些宏不是 C++ 标准的一部分,可能在 C++ 实现中用于内部目的。如果您想了解更多关于它们的信息,您应该用 atag 提出一个问题,表明该实现是什么。