Я только что написал следующую строку кода:
if (++(data_ptr->count) > threshold) { /*...*/ } // example 1
Мое намерение состоит в том, чтобы увеличить переменную count
в структуре данных, на которую указывает data_ptr
, прежде чем проводить сравнение с threshold
, и эта строка кода работает.
Если бы вместо этого я хотел увеличить data_ptr
перед сравнением, я написал бы следующее:
if ((++data_ptr)->count > threshold) { /*...*/ } // example 2
Из любопытства я также попробовал эту строку кода:
if (++data_ptr->count > threshold) { /*...*/ } // example 3
И обнаружил, что он ведет себя точно так же, как и первый.
Первый вопрос: Почему в пример № 3 работает так же, как пример № 1? Это вопрос приоритета оператора? Что-то в стандарте? Мне пришлось написать быструю тестовую программу, потому что ответ для меня не был очевиден.
Второй вопрос: Должен ли я написать это if
заявление по-другому? Я мог бы сначала выполнить приращение в отдельной строке, а , а затем протестировать условие, чтобы избежать возможной путаницы. Это необходимо, или первые два примера достаточно очевидны сами по себе?