在 C 中,如果 foo 是一个结构,那么写“struct foo”而不是“foo”有区别吗?
例如:
struct sockaddr_in sin;
struct sockaddr *sa;
// Are these two lines equivalent?
sa = (struct sockaddr*)&sin;
sa = (sockaddr*)&sin;
谢谢/埃里克
事实上,在标准的“C”中,它需要指定struct
关键字。这在 C++ 中是可选的。
这就是有些人这样定义结构的原因:
typedef struct foo { ... } bar;
能够使用bar
而不是struct foo
. 但是,一些 C 编译器不强制执行此规则。
是的。在 C(相对于 C++)中,结构位于它们自己的命名空间中。所以如果你定义了一个
struct sockaddr { ... }
你不能用它作为
sockaddr s;
sockaddr *ps;
为了使其合法,您可以使用 typedef 来导入类型名称的非结构命名空间:
typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;
如果你 typedef 它,你可以只使用“foo”。
这取决于结构的定义方式。如果它是使用 typedef 定义的,则不必将 stuct 关键字放在前面。
typedef struct
{
//
} aStruct;
aStruct abc;
但如果它不是 typedef,则需要 struct 关键字。
struct aStruct
{
//
} ;
struct aStruct abc;