В языке C каждое заявление в struct
должен объявить поле данных (возможно, безымянного). Это означает, что можно определить типы внутри struct
в C, если объявление нового типа встроено как часть объявления поля данных. Например
struct Outer {
struct Inner {
int i;
} field;
};
struct Outer a;
a.field.i = 42;
В приведенном выше примере тип struct Inner
объявляется внутри типа struct Outer
. Однако объявление типа «вложенное» struct Inner
никоим образом не локализовано внутри struct Outer
. Он по-прежнему будет иметь размер файла, так как язык C не имеет такой области, как область struct
. Это означает, что вы все еще можете использовать struct Inner
в качестве члена одного и того же файла объем
struct Inner b;
b.i = 42;
Между тем, этот прием не применяется к typedef
деклараций, поскольку typedef
декларации не объявляют поля данных.
Обратите внимание, что в духе языка C, даже если ваша заявка typedef
была как-то легальной, она все равно объявит имя typedef MojInt
с объемом файла. То есть он будет вести себя точно так же, как если бы вы разместили объявление typedef
до struct
.
т.к. C не C++. –
Ну, я нашел нечто похожее в структурах данных ядра Windows, я считаю, что он находится в C [link] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff550694%28v=vs.85% 29.aspx) – user2533527
@ user2533527, это не то же самое. Этот typedef находится в глобальном масштабе (например, первый на посту Mic4ael), и это является законным и довольно распространенным явлением. Мы обсуждаем typedefs _inside_ a struct. – Guido