pan_0326 发表于 2010-05-22 11:43

本帖最后由 pan_0326 于 2010-05-22 13:08 编辑

回复 6# EricFisher


1.struct T {}; //空结构体
因为Interface是没有数据的,但仍然需要位置信息,所以要用空结构体作为Interface的数据.
要求sizeof(struct T)==0,align=1
gcc和tcc都支持此特性
2.struct T { int n; int n }; //结构成员重名
由于多继承共同祖类的原因,需要支持成员重名,宏EXTENDS2的覆盖技术更需要此特性
gcc和tcc都支持此特性
3.struct T1 { struct T; }; //无名成员结构
这是实现对祖类成员透明访问的关键特性
tcc支持此特性,gcc加个参数-fms-extensions后也支持
4.struct { union { int n; double f; }; } t={1.2f}; //联合初始化最后的成员f
如果要使用EXTENDS2,最好支持此特性,因为虚表指针覆盖发生在首部,当然初始化就要避开到尾部.
这是Coo唯一要求的新特性,C语言规范对此很模糊,所以有的编译器不支持,有的初始化第一个.
tcc根本不支持联合初始化,我在tcc-0.9.25基础上做了修改成tcc-0.9.25.1完美支持尾初始化.
gcc只支持首初始化,需要以后修改.现在可以暂时用C99特性中的指定初始化代替.
其实此特性很不重要,像gcc那样支持首初始化就可以了.因为只使用在带虚函数指针的类的初始化中,
几乎没有人会这么干,这条只是理论上的洁癖般的完善.

所以Coo可以放心使用,没修改C语言的什么规范,gcc支持就足够了.
页: 1 [2]
查看完整版本: Coo - C, Object Oriented