gpt4 book ai didi

c++ - 无法找到 C++ 标准库头文件中未定义的宏

转载 作者:行者123 更新时间:2023-11-28 04:54:11 25 4
gpt4 key购买 nike

我知道对于 C 标准库中的每个 <header.h>,C++ 都有一个 头文件,例如

每个 都将包含其对应的 <header.h> 并取消定义与标准库函数对应的大量宏列表,例如:

/*sample taken from cstdlib*/
// Get rid of those macros defined in <stdlib.h> in lieu of real functions.
#undef abort
#undef abs
#undef atexit
/* ... */

并将相应的函数传递到 std 命名空间中:

namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION

using ::div_t;
using ::ldiv_t;

using ::abort;
using ::abs;
using ::atexit;
/* ... */
}

查看 stdlib.h 没有这些宏的踪迹,只有正常的函数原型(prototype)。在 /usr/include 处使用 grep 进行递归搜索显示它们未定义,仅在 文件中未定义。我错过了什么?

我的 gcc 版本是 5.4.0,我使用的是与 Windows 10 捆绑在一起的 Ubuntu 16.04.3 LTS

最佳答案

请注意,您描述的所有内容都是特定于您正在观察的特定库实现的,并不适用于所有编译器的所有 C 或 C++ 库。

取消定义未定义的宏没有任何效果。为了独立于所使用的 C 库,C++ 头文件可以取消所有标准符号的定义,以防不是因为它们被定义为宏。

例如,在独立环境(无操作系统)中,不可能使用标准 GNU C,因为它具有操作系统和 POSIX 依赖项。在这种情况下,可以使用替代的 C 库,例如 Newlib。然而,GNU C++ 库只依赖于标准 C 库,因此可以与可以将它们定义为宏的替代 C 库一起使用。

关于c++ - 无法找到 C++ 标准库头文件中未定义的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47542129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com