size_t的

时间:2018-05-26 10:22:49

标签: c types size-t

对于给定的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)吗?或者有没有动态的方法来做到这一点?

1 个答案:

答案 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++) {
        ...
    }
}

你应该完全没问题。