__STDC_LIMIT_MACROS 和 __STDC_CONSTANT_MACROS 是什么意思?

问题描述 投票:0回答:5

我在我的系统的标准 C++ 库以及我正在使用的库中的一些标头中看到了这一点。

这两个定义的语义是什么? 除了源本身之外,还有像这样的 #define 的很好的参考吗?

c++ stl macros
5个回答
51
投票

__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++ 标准的一部分,但它已被多个实现采用。


8
投票

上述问题已经消失。 C99 是一个旧标准,因此这在 C++11 标准中已被明确否决,因此 C11 删除了此规则。

更多详细信息:


4
投票

在C++下的

stdint.h
中,它们控制是否定义像
INT32_MAX
INT32_C(v)
这样的宏。请参阅您平台的
stdint.h
了解更多信息。


0
投票

有一个关于 Visual Studio 2022 中未定义 PTRDIFF_MAX 的 MSVC 错误查询。今天从 VS 2019 迁移到 VS 2022 时,我遇到了同样的错误。 我发现在 #include 之前定义这个 __STDC_LIMIT_MACROS 解决了这个问题。


-6
投票

这些宏不是 C++ 标准的一部分,可能在 C++ 实现中用于内部目的。如果您想了解更多关于它们的信息,您应该用 atag 提出一个问题,表明该实现是什么。

© www.soinside.com 2019 - 2024. All rights reserved.