gpt4 book ai didi

c - C 模块中的命名空间或包

转载 作者:行者123 更新时间:2023-11-30 16:48:58 25 4
gpt4 key购买 nike

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

嵌套结构是我正在研究的结构之一。

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

如果我必须构建一个与库链接的库或多模块化应用程序,以便每个模块可以具有与另一个模块中相同的变量、函数或结构名称。

如果您要链接两个名称冲突的第三方库(.a 文件等),该怎么办?如何解决此类冲突。

最佳答案

好吧,从技术上来说不行,没有办法以与 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 的方法,而不会破坏您的库。老实说,我从来没有这样做过,因为大多数库都有结构良好、命名良好的接口(interface),不太可能与其他库发生冲突。

关于c - C 模块中的命名空间或包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42756562/

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