首页 > 解决方案 > 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 包装吗?我玩了柜台的名字,但它没有改变。

警告是什么意思?

标签: cwarnings

解决方案


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

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

正如 rici 指出的那样,\r支票实际上是无关紧要的。


推荐阅读