C确实有名称空间.一个用于 struct 标记,另一个用于其他类型.考虑下面的定义:
struct foo
{
int a;
};
typedef struct bar
{
int a;
} foo;
第一个文件有tag个foo,而后一个文件被做成带有tyecif的foo类型.仍然没有发生名称冲突.这是因为 struct 标记和类型(内置类型和类型定义类型)位于不同的名称空间中.
C不允许的是随意创建new个名称空间.C在被认为在语言中很重要之前就已经被标准化了,添加名称空间也会威胁向后兼容性,因为它需要名称损坏才能正常工作.我认为这可以归因于技术问题,而不是哲学.
编辑: