6

在 C 中,如果 foo 是一个结构,那么写“struct foo”而不是“foo”有区别吗?

例如:

struct sockaddr_in sin;
struct sockaddr *sa;

// Are these two lines equivalent?
sa = (struct sockaddr*)&sin;
sa = (sockaddr*)&sin;

谢谢/埃里克

4

4 回答 4

11

事实上,在标准的“C”中,它需要指定struct关键字。这在 C++ 中是可选的。

这就是有些人这样定义结构的原因:

typedef struct foo { ... } bar;

能够使用bar而不是struct foo. 但是,一些 C 编译器不强制执行此规则。

于 2009-01-09T12:17:01.957 回答
6

是的。在 C(相对于 C++)中,结构位于它们自己的命名空间中。所以如果你定义了一个

struct sockaddr { ... }

你不能用它作为

sockaddr s;
sockaddr *ps;

为了使其合法,您可以使用 typedef 来导入类型名称的非结构命名空间:

typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;
于 2009-01-09T12:17:38.350 回答
0

如果你 typedef 它,你可以只使用“foo”。

于 2009-01-09T12:17:37.993 回答
0

这取决于结构的定义方式。如果它是使用 typedef 定义的,则不必将 stuct 关键字放在前面。

typedef struct 
{
//
} aStruct;

aStruct abc;

但如果它不是 typedef,则需要 struct 关键字。

struct aStruct
{
//
} ;

struct aStruct abc;
于 2009-01-09T12:18:00.877 回答