在查看 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
后跟一个分号,如果它用于奇怪的标记序列。
关于php - 什么都不做的宏(PHP源代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31928629/