gpt4 book ai didi

c++ - 如何避免 C 和 C++ 中的命名空间冲突

转载 作者:IT老高 更新时间:2023-10-28 23:03:41 32 4
gpt4 key购买 nike

我可以使用 using namespace 指令来避免标识符/变量名冲突,但是在大型项目中发生文件名或库名冲突时会发生什么。

C 中,传统的方法是使用#include_next 指令递归地添加文件。如何在不使用 #include_next 指令的情况下在 C++ 中实现相同的功能,并解决应用程序和共享库之间文件名重复的问题。例如,解决 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 二进制文件必须在多个平台上运行吗?这种情况下会不会有命名空间冲突?

最佳答案

I can use using namespace directive to avoid identifier/variable name collision

恰恰相反,using namespace指令引入了冲突。您可以通过指定范围来解决冲突,例如std::vector<>boost::numeric::ublas::vector<> .

... but what happens when file names or library names collision happens in large projects?

通过系统化可以轻松防止文件名冲突:organize your headers so that they mimic your namespaces ,例如boost::numeric::ublas::vector<>来自 #include <boost/numeric/ublas/vector.hpp> .并且不要将不同库的头文件和源代码堆放在一个目录中,以便您可以使用不同的目录前缀包含具有相同名称的头文件,例如#include <lzma/version.h>#include <linux/version.h> .

关于c++ - 如何避免 C 和 C++ 中的命名空间冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19067249/

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