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 );    /* Noncompliant - case 1*/
    var = 1, foo += var, n = 3;          /* Noncompliant - case 2*/ 
    var = (n = 1, foo = 2);              /* Noncompliant - case 3*/
    for ( int *ptr = &t[ 0 ],var = 0 ;
          var < n; ++var, ++ptr){}    /* Noncompliant - case 4*/
    if ((abc,xyz)<0) { return 1; }         /* Noncompliant - 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: консультация