Какой тип индекса массива в C99 следует использовать? Он должен работать на LP32, ILP32, ILP64, LP64, LLP64 и более. Это не должно быть тип C89.
Я нашел 5 кандидатов:
-
size_t -
ptrdiff_t -
intptr_t/uintptr_t -
int_fast*_t/uint_fast*_t -
int_least*_t/uint_least*_t
Существует простой код, который лучше иллюстрирует проблему. Каков наилучший тип для i и j в этих двух конкретных циклах. Если есть веская причина, два разных типа тоже хороши.
for (i=0; i<imax; i++) {
do_something(a[i]);
}
/* jmin can be less than 0 */
for (j=jmin; j<jmax; j++) {
do_something(a[j]);
}
P.S. В первой версии вопроса я забыл об отрицательных индексах.
P.P.S. Я не собираюсь писать компилятор C99. Однако любой ответ от программиста-компилятора был бы очень ценным для меня.
Аналогичный вопрос:
- size_t vs. uintptr_t
Контекст этого вопроса, если отличается, однако.