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

标签 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

最佳答案

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

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

do {} while (0) 形式是为了确保 YYFILL 后跟一个分号,如果它用于奇怪的标记序列。

关于php - 什么都不做的宏(PHP源代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31928629/

相关文章:

php - 我想从 DB::Select get() 获取 'INT' 值

php - 无法使用Fuel Kotlin将POST请求发送到我的PHP页面

php - 数组与语言代码的排列

php - 尽管我有,但没有选择数据库

c - 下面的代码有什么错误?

在C中转换IP地址

c - pthread 指针数组

javascript - 使用 PHP 实时更新数据

c - 为什么 scanf(%s) 中的 char 参数即使乱序也无法在 %c 中显示?

c - GPIO 外设何时分配其成员地址?