Постфикс с условием 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.

Другие вопросы по тегам