c-flex警告多字符字符常量



edit:这确实是对"\r\n"的检查,这让我很困惑,因为错误的行是计数器,而不是"if">

我在使用flex时遇到了一个奇怪的问题,在这段代码中,我试图计算一个注释最后有多少行,为此,我在"if"语句中更改了一个计数器

void commentHandler(int line){
int counter = 0;
if (1 == line){
printf("%d COMMENT 1n",yylineno);
}
else{
for(int i=2 ; i< yyleng-2 ; i++){
if('/' ==yytext[i] && '*' == yytext[i+1]){
errorHandler(ERROR_NESTED_COM);
}
if('n' == yytext[i] || 'rn' == yytext[i]){
counter++;
}
}
printf("%d COMMENT %dn", yylineno - counter, counter + 1);
}
}

但当我编译它时,它显示了以下警告:

warning: multi-charcter charecter constant [-Wmultichar]

由于这是我的硬件,我不能忽视警告,但无论我在那里放什么,它都会显示出我以前从未见过的警告,我真的不知道出了什么问题。

这是不是某种弯曲的包裹与之相矛盾?我用计数器的名字玩,但它没有改变。

这个警告是什么意思?

您需要单独测试字符,而不是聚合测试,但在这种情况下,您真正需要的只是:

if ('n' == yytext[i]) {

正如rici所指出的,r检查实际上是无关的。

相关内容

最新更新