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