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 | При использовании запятой для инициализации переменные и их значения сразу очевидны. |