Правило 12.3 MISRA C:2012

Оператор запятой не должен использоваться

Описание

Управляйте определением

Оператор запятой не должен использоваться.

Объяснение

Оператор запятой может быть вреден для удобочитаемости. Можно часто написать тот же код в другой форме.

Обменивайтесь сообщениями в отчете

Оператор запятой не должен использоваться.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

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

typedef signed int abc, xyz, jkl;

static void func1 ( abc, xyz, jkl );       /* Compliant - case 1 */

int foo(void) 
{
    volatile int rd = 1;                   /* Compliant - case 2*/
    int var=0, foo=0, k=0, n=2, p, t[10];  /* Compliant - case 3*/

    int abc = 0, xyz = abc + 1;            /* Compliant - case 4*/
    int jkl = ( abc + xyz, abc + xyz );    /* Not compliant - case 1*/

    var = 1, foo += var, kkk = 3;          /* Not compliant - case 2*/
    var = (kkk = 1, foo = 2);              /* Not compliant - case 3*/

    for ( var = 0, ptr = &t[ 0 ]; var < num; ++var, ++ptr){} 
                                           /* Not compliant - case 4*/

    if ((abc,xyz)<0) { return 1; }         /* Not compliant - case 5*/
}

В этом примере код показывает различное использование запятых в коде С.

Несовместимые случаи

СлучайПричина несоблюдения
1При чтении кода не сразу очевидно, к чему инициализируется jkl. Например, вы могли вывести, что jkl имеет значение abc+xyz, (abc+xyz)*(abc+xyz), f((abc+xyz),(abc+xyz)), и так далее.
2При чтении кода не сразу очевидно, имеет ли foo значение 0 или 1 после оператора.
3При чтении кода не сразу очевидно, какое значение присвоено var.
4При чтении кода это не сразу очевидно, какие значения управляют циклом for.
5 При чтении кода не сразу очевидно, зависит ли оператор if от abc, xyz или обоих.

Совместимые случаи

СлучайПричина соответствия
1С использованием запятых, чтобы вызвать функции с переменными позволен.
2Оператор запятой не используется.
3 & 4При использовании запятой для инициализации переменные и их значения сразу очевидны.

Проверяйте информацию

Группа: Выражения
Категория: консультация
Категория AGC: консультация
Язык: C90, C99