гибкое предупреждение - PullRequest
0 голосов
/ 14 апреля 2020

edit : это действительно была проверка для '\ 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]

, так как это мой HW, я не могу игнорировать предупреждения, но независимо от того, что я вставил туда, он показывает то же предупреждение, которое я никогда раньше не видел, и я действительно не знаю, что пошло не так.

это какая-то упаковка flex, которая противоречит этому? Я играл с именем фишки, но оно не изменилось.

что означает предупреждение?

1 Ответ

1 голос
/ 14 апреля 2020

Вам нужно тестировать символы индивидуально, а не в совокупности, но в этом случае все, что вам действительно нужно:

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

Как указывает Ричи, проверка \r на самом деле является посторонней.

...