我有一个C header ,可以同时编译为C和C++(它仅使用公共(public)子集中的功能,并使用extern "C"东西)。

问题是, header 在全局 namespace 中声明了东西。由于通常的原因,我宁愿避免这种情况。我考虑过这样做:

namespace foo {
#include <foo.h>
}

这是个好主意吗?是否有不包括编辑头文件的替代方法?

最佳答案

不,这是个坏主意。使用C++声明时,由于标识符在错误的 namespace 中声明,可能会引入链接器错误。使用C声明,它可以工作,但是它可能会隐藏全局命名空间中的标识符之间的冲突(我想您试图避免这种冲突),直到链接时间为止。它实际上并没有将标识符放在命名空间中。

更好的主意是将您自己的标识符放在命名空间中,并避免在全局标识符中定义除main之外的任何内容。

09-13 13:31