3

根据手册 YY_BUF_SIZE16K我们需要覆盖它。但是,该手册没有指定如何覆盖它,我也找不到任何命令行选项。有人可以指出如何改变这一点。在生成的源码YY_BUF_SIZE中定义如下:

#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
#endif

所以在此之前可能有一种方法可以覆盖它。

4

2 回答 2

3

在您自己的代码中,只需将 #define YY_BUF_SIZE 设置为您想要的任何值。只要您编译代码以便编译器首先看到您的定义,#ifndef 守卫就会阻止设置默认值。

于 2013-09-04T13:56:11.747 回答
1

在我看来,在命令行上使用 -DYY_BUF_SIZE=99999 (当然对于任何数字)是完全覆盖该值的唯一方法。

内置的 flex 框架/前导码位于 .l 源代码的第一个(定义)部分中给出的任何 %{...%} 代码之前,并且框架位于 #ifndef YY_BUF_SIZE 所在的位置。因此,要在 .l 文件中覆盖,最好(避免可能的警告等)这样做

#undef YY_BUF_SIZE
#define YY_BUF_SIZE 99999

以这种方式进行覆盖的潜在缺陷是骨架也有线

#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))

因此该值不会受到重新定义的影响。在我的情况下,这并不重要,但这是需要注意的。

不幸的是,据我所知,没有办法在内置序言之前插入代码。有的话,不胜感激学习。

于 2020-12-05T16:28:28.550 回答