对于给定的size_t
,迭代的最佳数据类型是什么?
void do_some_for(size_t);
当我使用int
时,
void do_some_for(size_t const size) {
for (int i = 0; i < size; i++) {
}
}
一种善良的编译器会这样警告我。
....c:36:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 0; i < s; i++) {
^
在unsigned
之前放int
会清除警告。
void do_some_for(size_t const size) {
for (unsigned int i = 0; i < size; i++) {
}
}
现在我的问题是什么是最好的(安全的)数据类型?
我看到stdint.h#SIZE_MAX
打印了这个,
18446744073709551615 // at least 16 bits, i know.
明显等于2^63 -1
。
我应该使用unsigned long long int
(C99)吗?或者有没有动态的方法来做到这一点?
答案 0 :(得分:4)
我应该使用
unsigned long long int
吗?
你不能知道,可以吗?你可能需要32位;你可能需要64位。 (在一台非常老的机器上,你可能只需要16位。)
或者有任何动态的方法吗?
有!在每个系统上都有一个特殊类型,具有系统特定的定义,保证为:
此类型的名称当然是size_t
。
所以你应该写
void do_some_for(size_t size) {
for (size_t i = 0; i < size; i++) {
...
}
}
你应该完全没问题。