开发者

C structs vs typedef struct question

So my question is multifaceted.

For the purpose of understanding C (not C++) I believe the following code:

struct Foo { int bar; }; 

creates a custom type that I can use, but so does this:

typedef Foo { int bar; };

The only difference I have seen is whether or not I have to use the "struct" keyword before the variable of开发者_Go百科 the type Foo. What are the differences that cause this behavior?


The difference is:

struct Foo { int bar; }; 

creates structure type { int bar; } named Foo. I.e. full type name is struct Foo.

typedef Foo { int bar; };

creates alias Foo for unnamed structure type { int bar; }

However I'm not sure yours syntax is fully correct for strict C, but somehow it's OK for your compiler. Or it creates something different, but accidentaly it works, C syntax can be very tricky. Anyway second statement should be:

typedef struct { int bar; } Foo;

For further reference you can use this.


struct introduces a new type, but typedef merely creates an alias for another type. This declaration creates a new type called struct Foo:

struct Foo { int bar; }; 

This declaration is simply invalid:

typedef Foo { int bar; };

However, this declaration is valid, and creates a new, unnamed type, and also creates an alias to that type called Foo:

typedef struct { int bar; } Foo;

You can also create an alias to a named type - this creates an alias to the type struct Foo called Foo:

typedef struct Foo Foo;

These two names are completely interchangeable - you can pass a struct Foo to a function declared as taking an argument of type Foo, for example.

You can create aliases for any types, including built-in types. For example, you can create an alias for int called Foo:

typedef int Foo;


I believe your syntax is incorrect. typedef Foo { int bar; }; should be typedef Foo { int bar; } MyFoo;

The reason people would then use the typedef is so they can drop the struct in declarations. I.e.:

struct Foo myFoo;
//vs.
MyFoo myFoo;


when i am going to compile this code

typedef Foo { int bar; };

it says compile error

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜