如果您必须在同一程序中同时使用两组类型和函数,并且如果这些类型和函数名称必须在其封闭源文件1(i.e.之外可见,则您有一个包含这些类型定义和函数声明的.h文件),则必须至少重命名其中一组。别无选择。C不提供user-definable名称空间2,因此任何具有外部链接的对象都必须具有全局唯一的名称。 如果这些类型和函数名不必在其源文件之外可见(3(i.e.,它们不必由在其源文件之外定义的函数调用),那么您可以将这些函数声明为static,这将限制它们对封闭源文件的可见性。如果类型名称是源文件的本地名称(您没有将它们放在另一个源文件必须包含的.h中),则不会导出它们。 如果只需要使用一个集合或另一个集合,但运行时才知道哪个集合,则可以将每个集合放入共享库中,然后在运行时加载正确的集合(在*nix端使用dlopen,但不确定Windows等价物是什么)。 第四个选项是切换到C++并在唯一的命名空间中包装每个集合;取决于你在做什么,这可能是最快的选择。 函数名具有所谓的外部链接。 C有四个名称空间——标签名、标记名、struct和union成员名,以及所有其他标识符(变量名、函数名、typedef名、枚举常量等)。这些名称空间是固定的,不能再创建了。 函数名具有内部链接或没有链接。