我可以使用using namespace
指令来避免标识符/变量名称冲突,但是在大型项目中发生文件名或库名称冲突时会发生什么。
在C
中,传统的方法是使用#include_next
指令递归地添加文件。如何在C++
中实现相同的功能而不使用#include_next
指令,并解决应用程序和共享库之间出现重复文件名的问题。例如,在AIX math.h中绕过class()函数与名为"class"的标识符冲突的问题。
/* GNU Lesser GPLv2.1 or later */
#ifndef FFMPEG_COMPAT_AIX_MATH_H
#define FFMPEG_COMPAT_AIX_MATH_H
#define class some_text
#include_next <math.h>
#undef class
#endif /* FFMPEG_COMPAT_AIX_MATH_H */
编辑:
如果二进制代码需要在多个平台上运行,我可以使用 class machine-instruction-set
这样的名称吗?这种情况下可能会发生命名空间冲突吗?
#include_next
是什么意思? - Alexandre C.#include_next
可能会导致极大的混淆。我们建议只在没有其他选择时使用它。特别是,不应在属于特定程序的头文件中使用它;仅应用于类似于fixincludes
的全局更正。 - GCC手册。 - n. m.using namespace
会给你带来很多问题。尽量不要使用它。相反,你可以使用例如using std::vector
。不要包含整个命名空间。 - zoska