Какой тип индекса массива в 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
Контекст этого вопроса, если отличается, однако.