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*/
}В этом примере код показывает различные виды использования запятых в коде C.
Случаи несоответствия| Случай | Причина несоблюдения |
|---|
| 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 | При использовании запятой для инициализации переменные и их значения сразу становятся очевидными. |