MISRA C:2012 Rule 12.3

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

Описание

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

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

Объяснение

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

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

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

Примеры

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

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, n = 3;          /* Not compliant - case 2*/ 
    var = (n = 1, foo = 2);              /* Not compliant - case 3*/
    for ( int *ptr = &t[ 0 ],var = 0 ;
          var < n; ++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 оператор зависит от abcx, y, z , или оба.
Совместимые случаи
СлучайПричина податливости
1С использованием запятых, чтобы вызвать функции с переменными позволен.
2Оператор запятой не используется.
3 & 4При использовании запятой для инициализации переменные и их значения сразу очевидны.

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

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