lcc 源码读书笔记1之操作符的宏定义

lcc的有很多操作符,相关的定义也很奇特,采用了宏做预处理。让我这个小菜鸟看得傻了眼,具体如下,大家可以当作一个C编程技巧

  #define sizeop(n) ((n)<<10)
#define generic(op)  ((op)&0x3F0)          //返回操作码
#define specific(op) ((op)&0x3FF)
#define opindex(op) (((op)>>4)&0x3F)
#define opkind(op)  ((op)&~0x3F0)       
#define opsize(op)  ((op)>>10)     
#define optype(op)  ((op)&0xF)           //返回操作类型

#define gop(name,value) name=value<<4, //通过宏定义把枚举常量跟所定义的值绑定
#define op(name,type,sizes)                //每个操作符所允许的类型操作

enum {
#include "ops.h"
 LASTOP
};

#undef gop
#undef op

gop(CNST,1)
 op(CNST,F,fdx)
 op(CNST,I,csilh)
 op(CNST,P,p)
 op(CNST,U,csilh)
gop(ARG,2)
 op(ARG,B,-)
 op(ARG,F,fdx)
 op(ARG,I,ilh)
 op(ARG,P,p)
 op(ARG,U,ilh)           //ops.h的部分代码,其中B,F,I,P,U为类型后缀。在以后介绍LCC类型系统时会写出相关内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值