c模块中的命名空间或包

我是初学者级别的程序员,来自高级语言,感觉像c是扁平结构。 有没有一种模拟包的方法,所以我可以有一个干净的命名空间,而不需要前缀。

嵌套结构是我正在看的。

它是如何与第三方外部库一起工作的,当名称冲突时会发生什么,或者它是如何分开的。

如果我要构建一个库或一个与libs链接的多模块应用程序,那么每个模块可以有一个与另一个模块相同的变量,函数或结构名称。

此外,如果您链​​接两个名称冲突的第三方库(.a文件等),您如何解决此类冲突。

好的,从技术上来说,没有办法让命名空间与C ++完全相同。 不幸的是,这导致像SDL2这样的东西,它为每个函数添加“SDL_”前缀。 关于解决外部库之间的冲突,有一个解决方案。 假设我们有库“libfoo”,它具有该function

void do_foo(void *); 

定义。 您尝试编译并链接您的程序,但事实certificate您正在使用的另一个库“libfu”也具有此function。 现在我要做的是创建一些适配器库,用适当的前缀重命名该函数。 所以我们将有一个定义函数的文件“libfoo_f.h”

 void FOO_do_foo(void *); 

在“libfoo_f.c”中

 #include"libfoo_f.h" #include void FOO_do_foo(void *data) { do_foo(data); } 

所有这个function都提供了一种在不破坏库的情况下访问libfoo的do_foo的方法。 老实说,我从来没有这样做过,因为大多数库都有结构良好,命名良好的接口,不太可能与其他库冲突。