在C中,如果foo是结构,那么在编写"struct foo"而不仅仅是"foo"之间是否存在差异?
例如:
struct sockaddr_in sin; struct sockaddr *sa; // Are these two lines equivalent? sa = (struct sockaddr*)&sin; sa = (sockaddr*)&sin;
谢谢/ Erik
实际上,在标准"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;