类型定义语句,主要是结构体(类、联合体)的定义。它们都是以关键字struct / class / union开始的。我在scf框架里没有支持作用域运算符::,所以结构体的定义都是全局的,不能在结构体里定义其他结构体类型(但可以包含其他结构体变量)。struct S0 {struct S0* next;struct Data {int x;int y;} d;};像上面这样的结构体定义,我觉得分析起
类型定义语句,主要是结构体(类、联合体)的定义。
它们都是以关键字struct / class / union开始的。
我在scf框架里没有支持作用域运算符::,所以结构体的定义都是全局的,不能在结构体里定义其他结构体类型(但可以包含其他结构体变量)。
struct S0 {
struct S0* next;
struct Data {
int x;
int y;
} d;
};
像上面这样的结构体定义,我觉得分析起来太麻烦了[捂脸]
我认为,还是把C++的S0::Data这个类型放到全局里定义比较好。
struct S0_Data {
int x;
int y;
};
struct S0 {
struct S0* next;
S0_Data d;
};
如果是union的话,我倒是在scf框架里支持了结构体里的匿名联合体。
我设计的结构体里是可以添加成员函数的,这点类似C++。
结构体的语法分析并不复杂,它是以struct关键字加上结构体名字,再加上{}扩起来的顺序块构成的,最后以分号结尾。
我没有支持这样的结构体定义:struct S { int x; int y; } s0;
我的打算是类型定义和变量声明尽量分开(union除外)。
之所以对union做了跟C语言一样的处理,是不想让下面的代码也要单独定义一个全局的union类型:
struct S {
struct S* next;
union {
int i;
float f;
double d;
void* p;
};
};
类型定义模块的节点有6个:
1,class或struct关键字,
这两个在scf框架里没有区别,因为我没有支持public / private的权限控制。
2,类名的标志符,它是个字母或下划线开头的字符串。
3,左中括号,表示类成员(变量或函数)的定义开始,
4,右中括号,表示类成员(变量或函数)的定义结束。
5,分号,表示定义结束。
6,end,类定义结束之后要运行的代码,例如计算所占的字节数。
语法的编辑也很简单,只要把这些节点按照跟源代码一样的顺序连接起来就行。
除了union类型的成员变量之外,其他成员变量都是以类型名字开始的,所以引用了类型模块type的入口节点。
说说怎么计算结构体的字节数:
CPU读写内存时要尽量对齐:
1,如果变量是1个字节可以从任何地址开始,
2,变量是2字节就从能被2整除的地址开始,
3,变量是4字节就从被4整除的地址开始,
4,再大的变量就从被8整除的地址开始。
如果变量的字节数不足,就对齐到最近的2的幂。
例如,3字节的变量也是以4对齐的,5字节的也是以8对齐的。
对齐之后就是变量在结构体里的偏移量,然后加上变量的大小就可以计算出结构体的大小。
具体的语法分析函数,见下面的几张图,已加注释。
猜你喜欢
-
杭州海陆重工有限公司(杭州海陆重工有限公司是国企吗)
董事会决议通过的本报告期优先股利润分配预案□ 适用 √ 不适用二、公司基本情况1、公司简介■2、主要会计数据和财务指标公司是否需追溯调整或重述以前年度会计数据□ 是 √ 否■3、公司股东数量及持股情况
2023年09月07日70 -
证监会投资者保护局局长李量照片(证监会 李量)
今晚,本月首“虎”、今年第十八“虎”落马——据中央纪委国家监委消息,海南省委常委、三亚市委书记童道驰涉嫌严重违纪违法,目前正接受纪律审查和监察调查
2023年09月07日43 -
奶解酒吗(奶解酒吗然后)
以上也说过了,酒精进入身体后会刺激分泌三类东西,分别是:多巴胺、内啡肽以及Y-氨基丁酸,这三类物质你可能很陌生,但只要记住一点就好了,这三类物质是能让我们快乐和幸福的东西,也是因为这三种东西才让那么多
2023年09月07日19 -
北京灵光能源投资公司(北京灵光能源投资公司官网)
□本报记者 欧阳春香 天龙光电12月12日晚公告称,由于受到行业波动及光伏新政策的影响,公司主要产品单晶炉、多晶炉的市场需求急剧减少
2023年08月31日36 -
存折转账到银行卡(存折转账到银行卡需要多久)
因为现在看病买药一般都要用社保卡,而社保卡里面有一个社保账户和银行账户,激活金融功能和银行账户后就可以当做银行卡使用了,所以用社保卡发放养老金,可以让退休人员少办一张银行卡,也可以自助取款了,不用再拿
2023年08月31日3 -
ig指数期货(ig指数是什么意思)
法国CAC40指数收盘上涨51.96点,涨幅1.11%,报4730.69点,全年累计下跌10.95%所有行业板块均处出现上涨,矿业和零售板块领涨,基本资源板块涨幅超过1%
2023年08月31日37