区别于;结构foo*”;及;foo*”;其中foo是一个struct?

区别于;结构foo*”;及;foo*”;其中foo是一个struct?,c,struct,typedef,C,Struct,Typedef,在C语言中,如果foo是一个结构,那么编写“structfoo”而不仅仅是“foo”有什么区别吗 例如: struct sockaddr_in sin; struct sockaddr *sa; // Are these two lines equivalent? sa = (struct sockaddr*)&sin; sa = (sockaddr*)&sin; 谢谢/Erik事实上,在标准“C”中需要指定struct关键字。在C++中是可选的。 这就是为什么有些人这样定义

在C语言中,如果foo是一个结构,那么编写“structfoo”而不仅仅是“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编译器不强制执行此规则。

如果键入定义,可以只使用“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;