Line with more than one statement

Несколько операторов на линии

Описание

Этот дефект происходит, когда, прежде чем предварительная обработка запускается, анализ обнаруживает дополнительный текст после точки с запятой (;) на линии. Дефект не повышен для комментариев, for- определения цикла, фигурные скобки или обратные косые черты.

Риск

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

Фиксация

Запишите один оператор на строку.

Если вы не хотите устранять проблему, добавьте комментарии в свой результат или код, чтобы избежать другого анализа. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.

Примеры

развернуть все

int multi_init(void){
int abc = 4; int efg = 0; //defect

    return abc*efg;
}

В этом примере, abc и efg инициализируются на второй линии функции как отдельные операторы.

Коррекция — разделенная от запятой инициализация

Одна возможная коррекция должна использовать запятую вместо точки с запятой, чтобы объявить несколько переменных на той же линии.

int multi_init(void){
    int a = 4, b = 0;

    return a*b;
}
Коррекция — новая строка для каждой инициализации

Одна возможная коррекция должна разделить каждую инициализацию. Путем помещения инициализации b на следующей строке, код более длительные повышения дефект.

int multi_init(void){
    int a = 4;
    int b = 0;

    return a*b;
}
int multi_loop(void){
    int a, b = 0;
    int index = 1;
    int tab[9] = {1,1,2,3,5,8,13,21};

    for(a=0; a < 3; a++) {b+=a;} // no defect

for(b=0; b < 3; b++) {a+=b; index=b;} //defect

while (index < 7) {index++; tab[index] = index * index;} //defect
    return a*b;
}

В этом примере существует три цикла, закодированные на одних строках, каждом с несколькими точками с запятой.

  • Первый for цикл имеет несколько точек с запятой. Polyspace® не повышает дефект для нескольких операторов в for объявление цикла.

  • Polyspace действительно повышает дефект на втором for цикл, потому что существует несколько операторов после for объявление цикла.

  • while цикл также имеет несколько операторов после объявления цикла. Polyspace повышает дефект на этой линии.

Коррекция — новая строка для каждой инструкции циклов

Одна возможная коррекция должна использовать новую строку для каждого оператора после объявления цикла.

int multi_loop(void){
    int a, b = 0;
    int index = 1;
    int tab[9] = {1,1,2,3,5,8,13,21};

    for(a=0; a < 3; a++) {b+=a;}

    for(b=0; b < 3; b++){
      a+=b;
      index=b;
    }

    while (index < 7){
      index++;
      tab[index] = index * index;
    }
    return a*b;
}
int multi_if(void){

    int a, b = 1;
    if(a == 0) { a++;} // no defect 
else if(b == 1) {b++; a *= b;} //defect
}

В этом примере существует два условных оператора: if и else if. if линия не повышает дефект, потому что только один оператор следует за условием. else if оператор действительно повышает дефект, потому что два оператора следуют за условием.

Коррекция — новые строки для составных условных выражений

Одна возможная коррекция должна использовать новую строку для условий с несколькими операторами.

int multi_if(void){
    int a, b = 1;

    if(a == 0) a++;
    else if(b == 1){
      b++; 
      a *= b;
    }
}

Информация о результате

Группа: Хорошая практика
Язык: C | C++
Значение по умолчанию: Off
Синтаксис командной строки: MORE_THAN_ONE_STATEMENT
Удар: низко
Введенный в R2013b