gpt4 book ai didi

c++ - 我可以在命名空间中包含头文件吗?

转载 作者:行者123 更新时间:2023-12-04 17:01:00 26 4
gpt4 key购买 nike

我正在使用 <conio.h>头文件,在我的源代码的其他地方,我定义了一个名为 getch 的函数。它必须有这个名字。因为已经有 getch<conio.h> ,并且这个头文件在全局命名空间中声明了它的所有函数,我遇到了名称冲突。
我发现使用以下语法可以避免冲突:

namespace some_namespace
{
#include <conio.h>
}
然后我可以使用 some_namespace::getch当我想访问 <conio.h> 中的功能时和 getch当我想访问我自己的功能时。
这是有效的语法吗?我知道 <conio.h>仅适用于 Windows,但这种语法在所有编译器中的行为是否相同?你有什么其他方法可以解决这个问题?
编辑:
我在 Windows 上使用 GCC 和 MSVC 2019,它在它们两个上都编译得很好。
我可以访问 <conio.h> 中的功能还有, getch特别是我上面展示的(尽管我应该在 MSVC 中使用名称 _getch 而不是 getch)。

最佳答案

系统头文件,如 <conio.h>打算在 C 和 C++ 中使用的将它们的声明括在 extern C 中。范围,强制 C 链接包含在其中的所有内容,无论您添加什么额外的 C++ 命名空间。这就是你的代码在这种情况下编译的原因。
另见 this ,这几乎是这个问题的重复,但不完全是。
简而言之,是的,它是有效的,但我强烈反对它。有许多其他方法可以解决这个问题,例如为您想要为其提供替代符号的函数创建包装模块。
作为旁注:尝试放置自己的 getchextern C堵塞。我的猜测是你会得到一个链接器错误。

关于c++ - 我可以在命名空间中包含头文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67449074/

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