无效的宏(PHP源代码)

时间:2015-08-10 20:34:21

标签: php c

在查看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

2 个答案:

答案 0 :(得分:3)

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

如果YYFILL什么都不做,则解析器代码无法重新填充其输入缓冲区。这可能意味着原始输入缓冲区应该是完整且有效的。 (如果您从文件中读取内容,则重新填充输入缓冲区将会执行此操作。)

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

答案 1 :(得分:0)

我使用占位符这样的东西。比如说,在您的示例中,当光标超出垂直限制时,您还没有决定要做什么。同时,你想在这个地方留言,就像评论中的待办事项一样。