struct type1 {
int field1;
short field2[2];
void * field3;
...
};
struct type2 {
char field1[200];
type1 field2;
...
};
观察上面的类型定义可以发现,每一个数据类型都由若干个field 组成,而每一个 field有2个显式属性和1个隐式属性,即“类型”、“名称”和“大小”,因此,每一个数据类型都可以用一个 (type, name, size) 三元项的list来描述,例如:
type1的描述:
( int, field1, sizeof(field1) )
( short, field2, sizeof(field2) )
( void *, field3, sizeof(field3) )
...
type2 的描述:
( char, field1, sizeof(field1) )
( type1, field2, sizeof(field2) )
...
同时,每一个数据类型都有自己的名字,而且不难发现,如果一个数据类型(type1)是另一个数据类型(type2)的子类型,则充当子类型的数据类型必须放在前面,所以我们可以用一个 (name, field-list) 二元项的有序 list 来描述任意的数据类型集,例如:
( type1, field-listof(type1) )
( type2, field-listof(type2) )
其中field-listof()是一个借记符,表示field的list
另外,由于每一个field都是有大小的,显然,每一个数据类型也是有大小的,其大小就等于各个field大小的和。