我是一名来自高级语言的初级C程序员,感觉像c是扁平结构。有没有一种模拟包的方法,所以我可以拥有一个干净的命名空间而不需要前缀。
嵌套结构就是我所看到的。
它如何与第三方外部库一起使用,当名称冲突时会发生什么或者它是分开的。
如果我要构建一个库或一个与libs链接的多模块应用程序,那么每个模块都可以有一个与另一个模块相同的变量,函数或结构名称。
此外,如果您要链接两个名称冲突的第三方库(.a文件等),您将如何解决此类冲突。
答案 0 :(得分:0)
好的,从技术上来说,没有办法让命名空间与C ++完全相同。不幸的是,这会导致像SDL2这样的东西,它为每个函数添加“SDL_”前缀。关于解决外部库之间的冲突,有一个解决方案。假设我们有库“libfoo”,它具有函数
void do_foo(void *);
定义。您尝试编译和链接您的程序,但事实证明您正在使用的另一个库“libfu”也具有此功能。现在我要做的是创建一些适配器库,用适当的前缀重命名该函数。所以我们将有一个定义函数
的文件“libfoo_f.h”void FOO_do_foo(void *);
和“libfoo_f.c”
#include"libfoo_f.h"
#include<libfoo.h>
void FOO_do_foo(void *data)
{
do_foo(data);
}
所有这个功能都提供了一种在不破坏库的情况下访问libfoo的do_foo的方法。老实说,我从来没有这样做过,因为大多数库都有结构良好,命名良好的接口,不太可能与其他库发生冲突。