size_t 的可变迭代规模
variable scale of iterating for 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++) {
^
并在 int
之前放置 unsigned
以清除警告。
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) 吗?或者有什么动态的方法可以做到这一点?
Should I use unsigned long long int
for that?
你不可能知道吧?你可能需要 32 位;你可能需要 64 位。
(在一台非常老的机器上你可能只需要 16 位。)
Or is there any dynamic way to do this?
有!在每个系统上都有一个特殊类型,具有系统特定的定义,保证是:
- 无符号
- 适当的大小来存储您可以在该系统上操作的任何对象的大小
而这个类型的名字当然是size_t
.
所以你应该写
void do_some_for(size_t size) {
for (size_t i = 0; i < size; i++) {
...
}
}
你应该很好。
对于给定的 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++) {
^
并在 int
之前放置 unsigned
以清除警告。
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) 吗?或者有什么动态的方法可以做到这一点?
Should I use
unsigned long long int
for that?
你不可能知道吧?你可能需要 32 位;你可能需要 64 位。 (在一台非常老的机器上你可能只需要 16 位。)
Or is there any dynamic way to do this?
有!在每个系统上都有一个特殊类型,具有系统特定的定义,保证是:
- 无符号
- 适当的大小来存储您可以在该系统上操作的任何对象的大小
而这个类型的名字当然是size_t
.
所以你应该写
void do_some_for(size_t size) {
for (size_t i = 0; i < size; i++) {
...
}
}
你应该很好。