最近在写Tenshi的解释器,觉得解释器也算是一个比较特殊的程序。如果能用gcc编译器提供的一些扩展,可能会提高程序的可读性与效率,至于移植性,由于gcc本身就是移植性很好的编译器,所以不大担心其在其它平台在的使用。我认真看了一下GCC的使用手册,重点看了一些GCC对C语言的一些扩展,有很多很有用,如把标签作为普通值,然后用goto任意跳转,还有designator来初始化结构体与共用体,case的范围扩展等等。其中有一个很有趣,就是GCC可以对C语言进行词法定界。
据文档说,对此,编译器使用的方法叫“trampoline”,并给出了trampoline的pdf说明文档的地址,我已下载,准备好好看一下,了解一下它的奇妙之处。
测试代码如下:
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
typedef const char * (*GetName)();
-
-
struct Person{
-
const char *name;
-
GetName getName;
-
};
-
-
typedef struct Person Person;
-
-
Person *NewPerson(const char *name){
-
Person *person=(Person*)malloc(sizeof(Person));
-
person->name=name;
-
const char *getname(){
-
return person->name;
-
}
-
person->getName=getname;
-
return person;
-
}
-
-
int main(){
-
Person *moligaloo=NewPerson("Moligaloo");
-
printf("%s",moligaloo->getName
());
-
free(moligaloo);
-
return 0;
-
}
-
-
-