为了在flex和其他版本的lex之间获得更多兼容性,我们应该在flex命令中添加-l
选项。
其中一个不兼容性是yylineno
(存储行号的全局变量)。虽然有两种方法可以激活此选项:
使用%选项yylineno
或-l选项
我总是有这样的警告:
警告C4102:'find_rule':未引用标签
任何帮助请避免这个警告!
答案 0 :(得分:1)
根据C4102的说明,原因是未引用的标签:
int f()
{
test: // This will produce C4102
return 1;
}
int main()
{
f();
return 0;
}
要防止出现警告,您可以删除未使用的标签或通过修改源来禁用警告:
#pragma warning(push)
#pragma warning(disable: 4102)
void f()
{
test: // This will produce C4102
return;
}
#pragma warning(pop)
或将/wd4102
指定为编译器开关。
正如您所说,这是生成的代码,您不希望更改编译器开关是唯一的选择(我能想到)。
答案 1 :(得分:1)
由于您说触发警告的代码是自动生成的并且无法由您控制,因此摆脱警告的唯一方法是仅针对该代码禁止警告。你有两个选择。
选项一是改变特定文件的编译器设置(不是最好的维护)。
选项2是将。#include
.c文件放入另一个文件并将其包装到#pragma warning
中:
//WrapperGateFile.c
#pragma warning(push)
#pragma warning(disable: 4102)
#include "ProblematicFile.c"
#pragma warning(pop)
和(重要!)要么不将有问题的.c文件包含到项目中,要么从构建中排除原始的.c文件("从构建"属性中排除),这样它就不会被编译和链接两次