在C中,如果foo是一个结构体,写“struct foo”而不是“foo”是否有区别?“struct foo *”和“foo *”之间的区别foo是一个struct吗?
例如:
struct sockaddr_in sin;
struct sockaddr *sa;
// Are these two lines equivalent?
sa = (struct sockaddr*)&sin;
sa = (sockaddr*)&sin;
感谢/埃里克
在C中,如果foo是一个结构体,写“struct foo”而不是“foo”是否有区别?“struct foo *”和“foo *”之间的区别foo是一个struct吗?
例如:
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编译器不执行此规则。
如果您键入它,您可以使用“foo”。
是的。在C中(而不是C++),结构体在它们自己的命名空间中。所以,如果你定义一个
struct sockaddr { ... }
你可能不使用它作为
sockaddr s;
sockaddr *ps;
为了使这一法律,你可能为了导入类型名称的非结构命名空间使用的typedef:
typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;
这取决于如何定义结构。如果使用typedef定义它,则不必将stuct关键字放在前面。
typedef struct
{
//
} aStruct;
aStruct abc;
但如果它不是typedef,则需要struct关键字。
struct aStruct
{
//
} ;
struct aStruct abc;