The code in your post is obviously incomplete, just declarations, so it is hard to say anything conclusive.
On obvious difference is that in C++ the inner struct type will be a member of outer struct type, while in C language both struct types will be members of the same (enclosing) scope. (BTW, was it your intent to declare them locally in main
?).
In other words, in C++ the code that follows would have to refer to the structs as xx
and xx::yy
, while in C they would be just xx
and yy
. This means that the further code would look different for C and C++ and if it will compile in C++, it wouldn't compile in C and vice versa.
Added: C language prohibits declaring struct types inside other structs without declaring a member of that type. So, you struct yy
declaration is illegal in C and will produce compiler diagnostic message. If you wanted your code to become legal in both C and C++, you'd have to combine the struct yy
declaration with some data member declaration. In your case that could be pointer q
:
struct xx {
int x;
struct yy {
char s;
struct xx *p;
} *q;
};
The above is legal in both C and C++ (taking into account the differences I explained earlier), but your original declaration is not legal in C.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…