编译研究(1)——函数前向定义
2007-06-24 18:04
246 查看
一年前写了个小型编译器,很久没碰,觉得蛮可惜的,于是从上个月开始又搬出来,利用业余时间改改bug,增加一些新功能 ,倒也比过去强壮实用了不少。今天想把过程调用放到表达式中去,让其返回值也参加运算。想着没什么难度,就开始了。谁知忽略了很重要的一样内容,因为在表达式中要对所有操作数做类型检查,对过程返回值,由于有的过程可能在调用函数(caller)后面定义,就是说被调用函数(callee)子树在调用点后面才生成,因此在生成caller子树时根本不知道callee的返回值类型,也就无法完成表达式操作数的类型检测,也就无法进行后面的代码生成了。因此,一个最简便也是最有效的办法就是前向声明,也就是对于调用点后才定义的函数,在调用点前应该简单声明一下函数原形,以完成代码生成工作。似乎从c编译器的角度领会到为什么很多c代码都要在代码前部声明一下函数原形再开始调用了。
相关文章推荐
- 编译研究(2)——关于函数重定义的处理
- 将第十四周的阅读程序中的Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除
- 虚函数的特性--内存结构的研究, 对象有虚表的反而多占内存了(多4字节即一个指针),函数是预告编译在代码区
- 原:PHP内核研究 函数的定义
- 编译研究(4)——变量定义再讨论
- codeblock无法编译,提示函数没有定义,但是函数已经 在头文件中定义了
- 函数定义为宏(以编译时间换空间)inline修饰的内联(内嵌)函数(空间换时间)
- 0.11内核编译出错 kernel/kernel.o:在函数‘copy_process’中:对'memcpy'未定义的引用。
- 关于头文件写类成员函数实现,编译时报“重复定义的符号”
- 函数默认值的设置放在声明的时候,在定义的时候如果设置默认值,编译会出错
- 编译包含ace库的程序时,显示系统函数重定义问题
- 函数重复定义的编译错误,MSVCRTD.lib库和LIBCMTD.lib库重复定义函数
- c++中函数只声明,不定义(不调用该函数)可以通过编译并运行
- vs2010编译时出现错误提示:error C2470: “xx”: 看起来像函数定义,但没有参数列表;跳过明显的函数体
- VS2010中提示无法打开源文件 stdafx.h,.CPP文件中很多类型函数未定义,但是编译通过
- 函数重复定义的编译错误,MSVCRTD.lib库和LIBCMTD.lib库重复定义函数
- 当你在VC++6.0编译上面的代码时会提示一些opencv的函数没有被定义,原因是环境没设置好
- delphi 函数类型定义为 array of string 无法编译通过的问题
- 编译研究(3)——同名变量定义
- 原:PHP内核研究 函数的定义