GCC对标准C的一个奇妙扩展:词法定界

 

   最近在写Tenshi的解释器,觉得解释器也算是一个比较特殊的程序。如果能用gcc编译器提供的一些扩展,可能会提高程序的可读性与效率,至于移植性,由于gcc本身就是移植性很好的编译器,所以不大担心其在其它平台在的使用。我认真看了一下GCC的使用手册,重点看了一些GCC对C语言的一些扩展,有很多很有用,如把标签作为普通值,然后用goto任意跳转,还有designator来初始化结构体与共用体,case的范围扩展等等。其中有一个很有趣,就是GCC可以对C语言进行词法定界。

  据文档说,对此,编译器使用的方法叫“trampoline”,并给出了trampoline的pdf说明文档的地址,我已下载,准备好好看一下,了解一下它的奇妙之处。

测试代码如下: 

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef const char * (*GetName)();
  5.  
  6. struct Person{
  7.         const char *name;
  8.         GetName getName;
  9. };
  10.  
  11. typedef struct Person Person;
  12.  
  13. Person *NewPerson(const char *name){
  14.         Person *person=(Person*)malloc(sizeof(Person));
  15.         person->name=name;
  16.         const char *getname(){
  17.                 return person->name;
  18.         }
  19.         person->getName=getname;
  20.         return person;
  21. }
  22.  
  23. int main(){
  24.         Person *moligaloo=NewPerson("Moligaloo");
  25.         printf("%s",moligaloo->getName());
  26.         free(moligaloo);
  27.         return 0;
  28. }
  29.  
  30.  
  31.  

 

C Comments(1) 2008年5月11日 08:26