Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Не стоит использовать оператор 'запятая', так как он может привести к путанице при чтении кода.
Рассмотрим следующий пример:
int foo(int x, int y) { .... }
foo( ( 0, 3), 12 );
Код может ввести программиста в заблуждение, если ему до прочтения вызова функции неизвестна ее сигнатура. Может показаться, что в функцию передается три аргумента, однако это не так: оператор 'запятая' в выражении '(0, 3)' вычислит левый и правый аргументы, а затем возвращает результат второго. В итоге, вызов функции на самом деле принимает вид:
foo( 3, 12 );
Диагностика выдает предупреждение и для других случаев, таких как например этот:
int myMemCmp(const char *s1, const char *s2, size_t N)
{
for (; N > 0; ++s1, ++s2, --N) { .... }
}
Данная диагностика классифицируется как:
|