在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
答案 0 :(得分:11)
事实上,在标准“C”中,需要指定struct
关键字。这在C ++中是可选的。
这就是有些人定义这样的结构的原因:
typedef struct foo { ... } bar;
可以使用bar
代替struct foo
。但是,某些C编译器不会强制执行此规则。
答案 1 :(得分:6)
是。在C(而不是C ++)中,结构体位于它们自己的命名空间中。所以如果你定义了一个
struct sockaddr { ... }
您不能将其用作
sockaddr s;
sockaddr *ps;
为了使其合法,您可以使用typedef导入类型名称的非结构名称空间:
typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;
答案 2 :(得分:0)
如果你输入它,你可以只使用“foo”。
答案 3 :(得分:0)
这取决于结构的定义方式。如果使用typedef定义它,则不必将stuct关键字放在前面。
typedef struct
{
//
} aStruct;
aStruct abc;
但如果它不是typedef,则需要struct关键字。
struct aStruct
{
//
} ;
struct aStruct abc;