我有一个C header ,可以同时编译为C和C++(它仅使用公共(public)子集中的功能,并使用extern "C"
东西)。
问题是, header 在全局 namespace 中声明了东西。由于通常的原因,我宁愿避免这种情况。我考虑过这样做:
namespace foo {
#include <foo.h>
}
这是个好主意吗?是否有不包括编辑头文件的替代方法?
最佳答案
不,这是个坏主意。使用C++声明时,由于标识符在错误的 namespace 中声明,可能会引入链接器错误。使用C声明,它可以工作,但是它可能会隐藏全局命名空间中的标识符之间的冲突(我想您试图避免这种冲突),直到链接时间为止。它实际上并没有将标识符放在命名空间中。
更好的主意是将您自己的标识符放在命名空间中,并避免在全局标识符中定义除main
之外的任何内容。