在C++中,人们可能会使用命名空间来保持独立的代码组在同一代码库中工作时不会无意中创建具有相同名称的函数,从而创建冲突。我的问题是,在命名空间的概念出现之前,如何在C语言中模拟命名空间。
在C语言中,可以使用结构体来实现类似于命名空间的功能。例如,可以定义一个结构体,其中包含多个变量和函数,并将其用作包含这些变量和函数的命名空间。然后,可以通过该结构体的实例来访问其中的成员,从而模拟命名空间的作用。但是,需要注意的是,C语言中并没有正式的命名空间概念,因此这种做法只是一种近似的模拟方法。通过给事物命名不同的名称,例如:
void namespace_group_function();
gtk+ 是符合传统风格的一个典型例子:
GtkWidget* gtk_window_new(GtkWindowType type);
为所有公共符号的名称使用一个常见前缀,因此foo::bar
变成foo_bar
。在所有符号名称上扔一个前缀本质上就是命名空间所做的事情。(还可以将没有前缀使用的符号解析为具有前缀的声明,这非常有帮助)
对于未导出的符号,您需要将每个模块放在单独的文件中。
对于已导出的符号,通常会应用前缀。常见的是两到三个字母。