moevm / oclint_extensions

2 stars 1 forks source link

Критерий -- использование константных значений прямо в коде и выражениях #12

Open AndrewGavril opened 11 months ago

AndrewGavril commented 11 months ago

Вместо использования макросов используются константы прямо в коде, что становится нечитабельным

Нужно предусмотреть ситуации с идексированием по 0, 1 элементу или n-1 элементу, когда эти константы оправданы

zmm commented 11 months ago

@AndrewGavril покажите, пожалуйста, пример - как правильно и как не правильно (и желательно возможные исключения из правила:)

AndrewGavril commented 11 months ago

Плохой пример:

char* input_text(){
    int count_char = 1;
    int summ_memory = 200;
    char* text = malloc(summ_memory*sizeof(char));
    if(text == NULL){
        puts("Eror! Failed to allocate memory.");
        exit(1);
    }
    char ch = getchar();
    char ch_old = ' ';
    int flag = 1;
    while(1){
        if(ch == '\n' && ch_old == '\n'){
            if (text[count_char - 3] != '.'){
                text[count_char - 2] = '.';
                text[count_char - 1] = '\0';
                break;
            }
            text[count_char - 2] = '\0';
            break;
        }
        if(count_char == summ_memory){
            summ_memory += 20;
            text = realloc(text, summ_memory*sizeof(char));
        }
        if(ch_old == '.'){
            flag = 1;
        }
        if(!(ch_old == '.' && (ch == ' ' || ch == '\t')) && !(ch_old == '.' && ch == '\n') && !((ch_old == ' ' || ch_old == '\t') && (ch == ' ' || ch == '\t') && flag == 1)){
            text[count_char - 1] = ch;
            flag = 0;
            count_char++;
        }
        ch_old = ch;
        ch = getchar();
    }
    return text;
}

В строке summ_memory += 20; число 20 не понятно за что отвечает и нужно только догадываться. Если человек не знаком с кодом или спецификой программы ,то такие константы могут вводить в заблуждение. (Как пример, человек может изменить это значение на неправильно и нарушить логику работу программы, особенно если число означает размер той или иной структуры).

Лучше заменить такой код на:

#define BUF_STEP_SIZE 20
...

summ_memory += BUF_STEP_SIZE;