【发布时间】:2011-04-23 06:37:28
【问题描述】:
如果我在 C 中声明一个结构/联合/枚举:
struct Foo { int i ... }
当我想使用我的结构时,我需要指定标签:
struct Foo foo;
要放宽这个要求,我必须使用 typedef 为我的结构命名:
typedef struct Foo Foo;
为什么默认情况下不在同一个“命名空间”中包含所有类型/结构/任何内容?在每个变量声明中要求声明标签的决定背后的基本原理是什么(除非 typdefe'd)???
许多其他语言没有这种区别,而且恕我直言,它似乎只会带来额外的复杂性。
【问题讨论】:
-
没有比 '#define LPFOO *FOO' 更复杂的地方 :( 但是,在我见过的大多数代码中,struct Foo 和 Foo 被赋予了不同的名称(例如 Foo_t 和 Foo 或其他你)即使它们与编译器位于不同的“命名空间”中。
-
能否请您提一下除了 C++ 之外的“其他语言”是什么?
-
@Arun : C# 和 Java 不会将它们的类型放在“单独的标签命名空间”中(但它们可以在真正的命名空间中,包括全局命名空间,这与标签命名空间有点不同由C介绍)