Ваши циклы не эквивалентны: второй l oop включает верхнюю границу PIDTYPE_MAX
, первый - нет.
Уменьшение переменной итератора до того, как тело l oop гарантирует, что условие 0 <= tmp < PIDTYPE_MAX
всегда верно в l oop. На самом деле это каноническое обратное l oop в C, где нижние границы являются включающими, а верхние - исключительными.
Обратите внимание, что для первого l oop требуется целое число со знаком, так что тест на tmp >= 0
имеет смысл. (Это всегда будет верно для целых чисел без знака.)
Типы без знака, такие как size_t
, часто используются для индексов и счетчиков массива, которые не могут быть отрицательными. Соответствующие петли:
for (size_t i = 0; i < N; i++) ... // iterate over [0, N) forwards
for (size_t i = N; i-- > 0; ) ... // iterate over [0, N) backwards