что такое правильный тип для индексов массива в c?


Какой тип индекса массива в С99 должны быть использованы? Он должен работать на LP32, ILP32, ILP64, LP64, LLP64 и многое другое. Он не должен быть С89 типа.

У меня нашли 5 кандидатов:

  • size_t
  • ptrdiff_t
  • intptr_t / uintptr_t
  • int_fast*_t / uint_fast*_t
  • int_least*_t / uint_least*_t
  • ij

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

    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. А я не собираюсь писать С99 компилятор. Однако никакого ответа от программиста компилятора будет очень ценным для меня.

    Похожий вопрос:

  • size_t vs. uintptr_t
    The context of this question if different though.