加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

什么都不做的宏(PHP源代码)

发布时间:2020-12-13 16:57:40 所属栏目:PHP教程 来源:网络整理
导读:在查看 PHP源代码时,我发现了这个宏: #define YYFILL(n) do {} while (0) 对我来说,看起来这没有任何作用.但是,YYFILL(n)在源代码中被多次调用.例如: if((YYLIMIT - YYCURSOR) 7) YYFILL(7) 这个宏的目的是什么? 此函数在PHP源代码中的位置以供参考:http
在查看 PHP源代码时,我发现了这个宏:

#define YYFILL(n) do {} while (0)

对我来说,看起来这没有任何作用.但是,YYFILL(n)在源代码中被多次调用.例如:

if((YYLIMIT - YYCURSOR) < 7) YYFILL(7)

这个宏的目的是什么?

此函数在PHP源代码中的位置以供参考:https://github.com/php/php-src/blob/PHP-5.4/ext/standard/var_unserializer.c

解决方法

YYFILL是 re2c使用的一个宏,它是一个接受正则表达式并生成C/C++源代码来解析它的程序. PHP在需要解析器的各个位置使用re2c.

如果YYFILL什么都不做,则解析器代码无法重新填充其输入缓冲区.这可能意味着原始输入缓冲区应该是完整且有效的. (如果你是从文件中读取内容,那么重新填充输入缓冲区就是你要做的事情.)

do {} while(0)形式用于确保YYFILL后跟分号,如果在奇怪的标记序列中使用它,则不会解析为奇怪的构造.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读