如何获取已安装的 GNU Bison 版本
How to get the installed version of GNU Bison
我要从 Bison 1.875 升级到 Bison 3.0.4 并希望向后兼容。
- 函数调用
yyparse(void *)
在 1.875 中有效,但在 3.0.4 中无效
- 函数调用
yyparse()
在 3.04 中有效,但在 1.875 中无效
Bison 输出一个 cpp 文件,包含行 #define YYBISON_VERSION "3.0.2"
我使用 strcmp
来确定实际版本是否是最新的并决定使用哪个函数调用:
int ret = 0;
if(bisonVersionCheck < 0)
{
ret = yyparse(void *);
}
else
{
ret = yyparse();
}
但是,正如您将看到的,这是 运行 时间确定的,因此编译器抱怨函数调用他无法执行任何操作。
我想要一个可以使用的宏,这样我就可以使用预处理器指令来 select 正确的函数调用。我在 bison 文档中找不到这样的宏。
- 有人知道“__BISON_VERSION”类似的宏吗?
- 有人有其他想法可以根据 bison 版本进行正确的函数调用吗?
ret = yyparse(void *)
在语法上不是正确的 C,无论野牛版本如何。也许这不是您要输入的内容。
我不清楚为什么 yyparse()
在您的 1.875 代码中不起作用。也许您在某处定义了宏 YYPARSE_PARAM
,以便向 yyparse
添加一个 void*
参数。在旧版本的 bison 中,这将更改 yyparse
的调用约定,但我认为它会被现代版本忽略。如果需要,请参阅声明 ℅parse-param
进行替换(尽管该问题似乎暗示未使用 yyparse
的参数)。
我要从 Bison 1.875 升级到 Bison 3.0.4 并希望向后兼容。
- 函数调用
yyparse(void *)
在 1.875 中有效,但在 3.0.4 中无效 - 函数调用
yyparse()
在 3.04 中有效,但在 1.875 中无效
Bison 输出一个 cpp 文件,包含行 #define YYBISON_VERSION "3.0.2"
我使用 strcmp
来确定实际版本是否是最新的并决定使用哪个函数调用:
int ret = 0;
if(bisonVersionCheck < 0)
{
ret = yyparse(void *);
}
else
{
ret = yyparse();
}
但是,正如您将看到的,这是 运行 时间确定的,因此编译器抱怨函数调用他无法执行任何操作。
我想要一个可以使用的宏,这样我就可以使用预处理器指令来 select 正确的函数调用。我在 bison 文档中找不到这样的宏。
- 有人知道“__BISON_VERSION”类似的宏吗?
- 有人有其他想法可以根据 bison 版本进行正确的函数调用吗?
ret = yyparse(void *)
在语法上不是正确的 C,无论野牛版本如何。也许这不是您要输入的内容。
我不清楚为什么 yyparse()
在您的 1.875 代码中不起作用。也许您在某处定义了宏 YYPARSE_PARAM
,以便向 yyparse
添加一个 void*
参数。在旧版本的 bison 中,这将更改 yyparse
的调用约定,但我认为它会被现代版本忽略。如果需要,请参阅声明 ℅parse-param
进行替换(尽管该问题似乎暗示未使用 yyparse
的参数)。