- 博客(15)
- 资源 (44)
- 收藏
- 关注
原创 LCC编译器的源程序分析(69)全局变量的初始化
前面已经介绍了全局函数和全局变量的声明处理,但全局变量的初始化,还没有详细地分析,现在就来干这件事情。比如编写C的程序,有如下的代码:#001 #002 int g_nTest = 100;#003 #004 int main(void)#005 {#006 int nTest1 = 1;#007 int nTest2 = 2;像第2行代码就是全局变量的声明和初
2007-08-31 22:07:00 5470 4
原创 Windows API一日一练(25)CreateSolidBrush函数
当你看到Windows显示的按钮时,背景颜色是灰色的。当你看到缺省的窗口背景时,它是白色的。当你的老板需要你创建一个黑色背景的按钮时,你会怎么样做呢?其实在Windows里先用API函数CreateSolidBrush创建画刷,然后调用FillRect函数来填充背景。这样来,不管你需要什么样的背景,都随心所欲了吧。现在先来搞懂CreateSolidBrush函数,下次再来练习FillRect。
2007-08-29 22:54:00 16979 2
原创 Windows API一日一练(24)DrawText函数
DrawText函数与前面介绍的TextOut函数都是文本输出函数,但它们是有区别的。DrawText函数是格式化输出函数,而TextOut函数不具备这样的功能。因而DrawText函数比TextOut函数功能强大,可以让文本输出时左对齐,或者右对齐,或者中间对齐,还可以让文本适应输出矩形内,如果超出时可以截断,或者显示为省略号的方式。DrawText函数在表格方式显示时肯定要使用到的函数。
2007-08-27 22:55:00 23296 2
原创 Windows API一日一练(23)SetTextColor函数
世界是多姿多彩的,色彩是不可以缺少的。在软件开发里,不同的字符颜色往往用来区分不同的数据类型,比如严重的警告,就是使用红色,当然这也是跟交通里红绿灯是一样的道理。最根本的原因,还是人类对自然的选择。毕竟人眼对不同的颜色作出了不同的选择。由于红色光波穿透性比较好,所以就形成以红色来警告的信号。说来也怪,人类的身体不管是什么颜色,流着的血一定是红色的。在软件开发里,要把输出字符的颜色符合现在人位的习惯
2007-08-26 21:37:00 8351 1
原创 LCC编译器的源程序分析(68)内存分配链表
LCC采用大块内存的方法,那它分配内存也是比较特殊的,它的源程序如下:#001 //大块内存结构。#002 struct block#003 {#004 struct block *next; //后继块指针。#005 char *limit; //尾位置#006 char *avail; //可用的开始位置.#007 };#008 #0
2007-08-26 11:35:00 4573 1
原创 LCC编译器的源程序分析(67)删除内存链表
LCC的内存分配是使用先分配大块内存,然后再从大块内存里分配出来小块内存,这样减少调用malloc的次数,当然也就减少调用函数free释放内存的次数,以便提高LCC的内存管理的性能。有网友对这个看不懂,我现在就把释放内存函数分析如下: #001 //#002 //删除内存链表.#003 //#004 //蔡军生 2007/08/23 QQ:9073204 深圳#005 //
2007-08-23 21:50:00 4713 3
原创 Windows API一日一练(22)TextOut函数
文本输出,从来就是比较常用的方式,自从发明文字以来,就应缺少不了文字的显示了。在以前,是书写到白纸上,让别人看懂它。现在到了信息的时代,当然是显示在屏幕上,即使你是不懂书法的,也可以显示出惊人的书法文字出来。在窗口里显示文字出来,就可以使用TextOut函数,当然不只这一个API函数可以显示字符了。TextOut函数是使用当前设备的属性来显示文字的,比如设备属性有字体类型,字体的颜色,字体背景的颜
2007-08-16 16:35:00 10152 6
原创 LCC编译器的源程序分析(66)DAG树分析例子
前面已经介绍创建分析树,下面就来详细地说明一个例子,看看到底生成什么样的分析树,C源程序如下:#005 int nTest1 = 1;#006 int nTest2 = 2;#007 int nTest3;#008 int i;#009 #010 nTest3 = nTest1 + nTest2; 把上面的源程序分析后,就生成下面的DAG树,如下:#
2007-08-13 22:47:00 5125
原创 LCC编译器的源程序分析(65)后端接口的结构注释
因为LCC后端可以生成不同机器结构的代码,所以需要定义后端的接口结构,当不同的模块实现这些接口时,就可以实现不同的机器代码生成。下面就是这个接口的结构定义注释。 #001 //后端代码生成的接口.#002 typedef struct interface #003 {#004 //数据类型.#005 Metrics charmetric;#006 Metrics
2007-08-11 19:20:00 4502 1
原创 LCC编译器的源程序分析(64)符号表的结构注释
符号表是用来保存每个符号信息的,因为编译器分析源程序的过程会生成很多符号的属性,后端根据这些属性来生成合适的指令和代码的格式。 #001 //符号表结构.#002 //#003 //蔡军生 2007/08/10 QQ:9073204#004 //#005 struct symbol #006 {#007 char *name; //符号的名称,大多数情况是源程序的
2007-08-10 21:32:00 4326
原创 LCC编译器的源程序分析(63)创建DAG森林的源程序
#001 //#002 void walk(Tree tp, int tlab, int flab) #003 {#004 //创建DAG森林.#005 listnodes(tp, tlab, flab);#006 #007 //如果DAG森林生成.#008 if (forest) #009 {#010 Node list = fore
2007-08-09 21:55:00 4706 4
原创 LCC编译器的源程序分析(62)生成常量树节点的流程
在LCC里分析下面的语句:#005 int nTest1 = 1;就需要把1生成一个常量树节点,那么在LCC里用怎么样的流程来创建这个树节点的呢?这个过程大体是这样的:当碰到赋值符号后,就需要分析表达式,于是调用函数获取记号函数CCaiCompiler::Instance()->GetLex()->GetToken(),接着下来就调用构造常量符号项的函数Symbol CCaiLex:
2007-08-07 21:45:00 3598
原创 Windows API一日一练(21)SetWindowLongPtr和GetWindowLongPtr函数
在软件开发里,大家一直对着这个问题是执着的,那是“复用”。总想自己写出来的代码,可以适应性很强,到那里都可以落地生根。因此,面向对象的语言就层出不穷,每个都坚称可以最大地复用代码。在面向对象里,C++是非常强大的。下面就来用C++把上面介绍的程序封装起来,这样可以复用,或者说条理更加清晰。#001 #002 int APIENTRY _tWinMain(HINSTANCE hInstanc
2007-08-04 08:55:00 16392 7
原创 LCC编译器的源程序分析(61)复合语句的代码块流程
LCC编译器要分析下面的程序,大体流程是这样的。#001 #include #002 #003 int main(void)#004 {#005 int nTest1 = 1;#006 int nTest2 = 2;#007 int nTest3;#008 int i;#009 #010 nTest3 = nTest1 + nTest2;#0
2007-08-03 20:39:00 3726
原创 Windows API一日一练(20)LoadString、LoadIcon和LoadCursor函数
在编写国际化的应用程序里,经常要使用不同语言的字符串。比如中文菜单里叫做“文件”,而在英语里叫做“File”。开发这种软件的功能是一样的,只是界面上显示的文字不一样而已。为了方便这种软件的开发,在Windows里经常使用的方法就是替换掉显示的字符串,比如指定在中文里就显示“文件”,在英语里就显示“File”,是通过函数LoadString从不同的资源里加载不同的字符串显示来实现的。其实所有可变的字
2007-08-02 13:08:00 11975 4
python抓取天气并分析 实例源码
2017-08-28
书《深度学习》
2017-03-13
国产8051模拟器
2016-09-10
tinyxml2配套源码
2016-06-27
selenium的浏览器驱动
2016-06-14
开源鸿蒙4.0不能进入桌面的补丁
2024-03-17
开源鸿蒙 4.0 RK3566开发板配置
2024-03-17
svm_hog_data.rar
2020-03-02
实现numpy的C++库扩展
2019-11-24
python web py入门配套源代码
2018-02-23
webpy演示例子1
2018-02-21
胶囊模型的代码
2018-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人