宏处理器或编译器的符号表管理主要代码,采用的结构是一个hash表,hash表的每一项是一个链表。
例如#define IN 1,在程序编译的时候,需要把名字IN和替换文本1存入到某个表中。此后,当名字IN出现在某些语句中时,如int state=IN,就必须要用1来替换IN。
选择哈希表,检索速度快(O(1)+O(n))
代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define HASHSIZE 101 //宏处理器或编译器的符号表管理主要代码 struct nlist { struct nlist* next; char* name; char* defn; }; static struct nlist* hashtab[HASHSIZE]; //把s复制到堆内存中 char* my_strdup(char* s){ char* p; p=(char*)malloc(strlen(s)+1); if(p!=NULL){ strcpy(p,s); } return p; } //取得hashval(下标),一个字符串s对应一个hash表中的下标 unsigned int hash(char* s){ unsigned hashval; for (hashval=0;*s!='