c - flex 警告 multi charecter charecter const
问题描述
编辑:确实是对 '\r\n' 的检查让我感到困惑,因为错误的行是计数器而不是“如果”
我在使用 flex 时遇到了一个奇怪的问题,在这段代码中,我试图计算一条评论最后有多少行,为此我在“if”语句中更改了一个计数器
void commentHandler(int line){
int counter = 0;
if (1 == line){
printf("%d COMMENT 1\n",yylineno);
}
else{
for(int i=2 ; i< yyleng-2 ; i++){
if('/' ==yytext[i] && '*' == yytext[i+1]){
errorHandler(ERROR_NESTED_COM);
}
if('\n' == yytext[i] || '\r\n' == yytext[i]){
counter++;
}
}
printf("%d COMMENT %d\n", yylineno - counter, counter + 1);
}
}
warning: multi-charcter charecter constant [-Wmultichar]
因为这是我的硬件,所以我不能忽略警告,但无论我放什么,它都会显示我以前从未见过的相同警告,我真的不知道出了什么问题。
这是与它相矛盾的一些 flex 包装吗?我玩了柜台的名字,但它没有改变。
警告是什么意思?
解决方案
您需要单独测试字符,而不是整体测试,但在这种情况下,您真正需要的是:
if ('\n' == yytext[i]) {
正如 rici 指出的那样,\r
支票实际上是无关紧要的。
推荐阅读
- python - 在 Pandas 中保留具有百分比重叠范围的行
- eclipse - Eclipse /Java> 我的新动态 Web 项目有 src 文件夹而不是 WebContent 文件夹
- android - 如何将 AppCompatActivity 更改为 Fragment?
- java - 无法实例化活动。java.lang.IllegalAccessException:无效 com.example.myapp.FirstActivity。
() 不能从 java.lang.Class 访问 - python - ModuleNotFoundError:没有名为“Crypto”或“Pyrebase”的模块
- gekko - 关于初始值约束的参数估计不适用于 m.connection 或 fixed_initial,对此有何建议?
- fortran - ifort 中的标志,用于避免将不一致的数据类型传递给 Fortran 子例程
- godot - Godot:未找到节点
- svelte - Svelte 存储:在 forEach 循环中更新的值不会动态更新(但仍会更改)
- javascript - Jest - 模拟类构造函数和方法