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 оператор зависит от abc x, y, z , или оба. |
Совместимые случаиСлучай | Причина податливости |
---|
1 | С использованием запятых, чтобы вызвать функции с переменными позволен. |
2 | Оператор запятой не используется. |
3 & 4 | При использовании запятой для инициализации переменные и их значения сразу очевидны. |