应该使用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]);
}
Run Code Online (Sandbox Code Playgroud)
PS在问题的第一个版本中,我忘记了负面索引.
PPS我不打算编写C99编译器.但是编译器程序员的任何答案对我来说都是非常有价值的.
类似的问题:
C#中的数组索引的类型是什么?
例如,在下面的代码中,索引是否会在访问数组元素(第三行)之前转换为int?
T[] myArray = new T[255];
byte index = 2;
T element = myArray[index];
Run Code Online (Sandbox Code Playgroud)
如果不是,使用'byte'类型的索引而不是'int'类型的索引访问数组元素会更快吗?
谢谢