这是我的第一篇技术文章,庆祝一下
今天,找了半天资料,终于在BCB6中编译通过flex生成的源文件,其实也很简单,只是在网上找资料的过程充满了曲折。在这里给大家说明一下,以免再犯这样的错误
1. 下载安装flex for windows版本,至少是2.5.4a, 以下的版本编译有错,主要是命名空间冲突
下载地址为
http://umn.dl.sourceforge.net/sourceforge/gnuwin32/flex-2.5.4a-1.exe
或者
http://gnuwin32.sourceforge.net/packages/flex.htm
2. 在工程中加入文件libyywrap.c
文件的内容为
/*
libyywrap - flex run-time support library "yywrap" function
*/
/* $Header: /home/daffy/u0/vern/flex/RCS/libyywrap.c,v 1.1 93/10/02 15:23:09 vern Exp $ */
int yywrap()
{
return 1 ;
}
/* $Header: /home/daffy/u0/vern/flex/RCS/libyywrap.c,v 1.1 93/10/02 15:23:09 vern Exp $ */
int yywrap()
{
return 1 ;
}
那么这个yywrap函数是干什么用的呢?其实,他是一个可以由用户来实现的函数,用来对多个文件进行处理。默认情况下,返回1,表示只需要处理一个文件,且当前文件已经打开,默认文件句柄为yyin。若返回0,则需要在这个函数中打开文件,并把文件句柄传给yyin。
至于低版本flex的为什么有命名空间冲突,我还没有研究,以后会补上。再就是我只试了使用flex生成的c文件,至于生成的c++文件是否也能编译通过,也待以后的测试。
更新历史:
2007.6.25 更新1 加入对yywap函数的说明。