C语言 如果`yywrap()`什么都不做,会发生什么?

w8biq8rn  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(106)

我读到写%noyywrap或定义yywrap()函数是强制性的。
如果我默认了一个yywrap()函数,其中我没有对yyin变量进行任何更改并返回0,那么在这种情况下会发生什么?
0意味着FLEX必须继续解析其他输入文件,但是flex是否在yyin变量中插入null,或者在这种情况下,它会进入无限循环?

2wnc66cl

2wnc66cl1#

如果yywrap()返回0,那么lexer将循环(尝试)读取更多数据。如果您使用的是从yyin读取的默认YY_INPUT,并且您没有在其上调用clearerr,那么您将得到一个无限循环。如果你调用clearerr,那么它会尝试读取更多,但是如果yyin指向一个没有改变的文件,那将再次EOF,你仍然会得到一个无限循环。
如果你改变了YY_INPUT来做其他的事情,它会做你改变它做的事情。

相关问题