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 существуют несколько операторов объявление цикла.

  • The 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
}

В этом примере существует два условных оператора an: if и else if. The if линия не поднимает дефект, потому что условию следует только один оператор. The 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