"В любом случае, следуйте рекомендациям" предпочитайте ++ я над я ++ ", и вы не ошибетесь". В чем причина этого в C?

Я встретил этот ответ на этот вопрос. В одной из строк автор упоминает:

В любом случае следуйте рекомендациям "предпочитайте ++i над i++", и вы не ошибетесь.

Я знаю, что ++i немного быстрее, чем i++, но думал, что нет причин для того, чтобы они ошибались. Я искал какое-то время, и ближе всего я мог добраться до this. В нем четко объясняется, почему предпочитается использовать ++i, но не все равно, как вы могли ошибиться, используя i++.

Так может кто-нибудь сказать мне, как может i++ пойти не так?

ПРИМЕЧАНИЕ: Мой вопрос не обман, так как я не спрашиваю о производительности. Я уже видел этот вопрос. Я спрашиваю, как может быть i++ ошибочно, как указано в ответе, о котором я упомянул выше.

Ответы

Ответ 1

В случае

for (i=start; i<end; i++)

против

for (i=start; i<end; ++i)

их значения полностью идентичны, потому что значение выражений i++ и ++i не используется. (Они оцениваются только для побочных эффектов.) Любой компилятор, который создает другой код для двух, является патологически плохим и должен быть заброшен в мусор. Здесь используйте любую форму, которую вы предпочитаете, но i++ является идиоматическим среди программистов C.

В других контекстах используйте форму, которая дает требуемое значение. Если вы хотите получить значение до инкремента, используйте i++. Это имеет смысл для таких вещей, как:

index = count++;

или

array[count++] = val;

где старое значение count становится индексом нового слота, в который вы собираетесь что-то хранить.

С другой стороны, если вы хотите значение после инкремента, используйте ++i.

Обратите внимание, что для целых типов все полностью эквивалентны:

  • i += 1
  • ++i
  • i++ + 1

а также следующие эквиваленты:

  • (i += 1) - 1
  • i++
  • ++i - 1

Для с плавающей запятой и указателей это сложнее.

Что касается любых объективных причин, то совет, который вы нашли, - это просто вздор. Если, с другой стороны, вы найдете ++i легче рассуждать, тогда не стесняйтесь брать совет, но это будет полностью зависеть от человека и того, к чему вы привыкли.