Постфикс с условием if
У меня есть это условие ниже:
if (MovementDetected)
{
if (MovementCount++ == 0)
{
TimeCount = WindowTime; /* e.g this is 10 seconds*/
}
if (MovementCount > MovementLimit)
{
MovementWasDetectedPreviously = TRUE;
}
if (MovementWasDetectedPreviously && TimeCount-- == 0)
{
Alarm=TRUE;
}
}
if (TimeCount-- == 0)
{
Alarm=FALSE;
MovementCount = 0;
}
MovementDetected = FALSE;
Мне интересно, если условие "if (TimeCount-- == 0)" будет уменьшать TimeCount на 1, если условие НЕ ИСТИННО?
2 ответа
Да, это декремент проверить это
int i=5;
if(i-- == 0)
{
}
printf("%d\n",i);
i
4 так i
внутри if()
получил декремент.
i--
это выражение, которое выполняется как i = i-1
и поэтому значение i
будет уменьшен.
Обратите внимание, что пост-декремент возвращает значение операнда и уменьшает его.
В заявлении
if (TimeCount-- == 0)
постфиксный оператор имеет более высокий приоритет над оператором равенства (==). Таким образом, TimeCount уменьшается независимо от результата оператора if, потому что он уменьшается до оценки.
Но помните, что оценка будет выполняться со старым значением (до уменьшения) TimeCount, как это происходит в случае постфиксных операторов.
Таким образом, значение TimeCount будет уменьшаться независимо от того, является ли он оператором if.