C++ 我可以在名称空间中包含headerfile吗?

C++ 我可以在名称空间中包含headerfile吗?,c++,namespaces,header-files,conio,C++,Namespaces,Header Files,Conio,我使用的是头文件,在我的源代码的其他地方,我定义了一个名为getch的函数,它必须有这个名称。由于中已经有一个getch,并且这个头文件在全局名称空间中声明了它的所有函数,因此我得到了一个名称冲突 我发现使用以下语法可以避免冲突: 名称空间某些名称空间 { #包括 } 然后,当我想访问中的函数时,我可以使用some\u namespace::getch,当我想访问自己的函数时,我可以使用getch 这是有效的语法吗?我知道只适用于windows,但是这种语法在所有编译器中的行为都是一样的吗?你

我使用的是
头文件,在我的源代码的其他地方,我定义了一个名为
getch
的函数,它必须有这个名称。由于
中已经有一个
getch
,并且这个头文件在全局名称空间中声明了它的所有函数,因此我得到了一个名称冲突

我发现使用以下语法可以避免冲突:

名称空间某些名称空间
{
#包括
}
然后,当我想访问
中的函数时,我可以使用
some\u namespace::getch
,当我想访问自己的函数时,我可以使用
getch

这是有效的语法吗?我知道
只适用于windows,但是这种语法在所有编译器中的行为都是一样的吗?你还建议用什么方法来解决这个问题

编辑: 我在Windows上使用GCC和MSVC 2019,在这两个平台上都可以很好地编译


我还可以访问
中的函数,
getch
,尤其是如上所示(尽管我应该在MSVC中使用名称
\u getch
,而不是
getch

< p>系统标题文件,如“代码> >代码>,它们将在C和C++中使用,将在声明中添加它们的声明,在<代码>外部c>代码>范围内,强制C链接以包含所有的内容,而不管添加的C++名称空间如何。这就是为什么您的代码在这种情况下编译

另请参见,这几乎是这个问题的重复,但不完全相同

简言之,是的,它是有效的,但我强烈反对它。还有许多其他方法可以解决这个问题,比如为您希望具有备用符号的函数创建包装器模块


作为旁注:尝试将自己的
getch
放入
extern C
块中。我猜你会得到一个链接器错误。

为什么不把你自己的代码(包括你的
getch
)放在你自己的名称空间中呢?别忘了
extern“C”
是一个C头文件。@S.M.我在gcc和MSVC 2019中都试过了,并且都能用。你应该把你的getch()在您的命名空间中。编写标准头的目的是在全局命名空间中使用它们。如果这种黑客行为碰巧起作用,那只是偶然的,如果使用其他编译器(包括您现在使用的编译器的未来版本),很可能会失败。