C 大小迭代的可变比例\u t
对于给定的C 大小迭代的可变比例\u t,c,types,size-t,C,Types,Size T,对于给定的大小\u t,迭代该大小的最佳数据类型是什么 void do_一些(尺寸t); 当我使用int时 void do\u some\u for(size\t const size){ 对于(int i=0;i
大小\u t
,迭代该大小的最佳数据类型是什么
void do_一些(尺寸t);
当我使用int
时
void do\u some\u for(size\t const size){
对于(int i=0;i
一个善良的编译器这样警告我
....c:36:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 0; i < s; i++) {
^
现在我的问题是什么是最好的(安全的)数据类型
我看到stdint.h#SIZE_MAX
打印了这个
18446744073709551615 // at least 16 bits, i know.
这显然等于2^63-1
我应该使用无符号long-long-int
(C99)吗?或者有什么动态的方法可以做到这一点
我应该使用无符号long-long-int
吗
你不知道,是吗?您可能需要32位;您可能需要64位。
(在一台非常旧的机器上,您可能只需要16位。)
或者有什么动态的方法可以做到这一点
有!每个系统上都有一个特殊类型,具有特定于系统的定义,保证:
- 未签名
- 具有适当的大小,以存储可在该系统上操作的任何对象的大小
size\u t
所以你应该写
void do_some_for(size_t size) {
for (size_t i = 0; i < size; i++) {
...
}
}
void do_一些(大小){
对于(大小i=0;i
你应该很好
我应该使用无符号long-long-int
吗
你不知道,是吗?您可能需要32位;您可能需要64位。
(在一台非常旧的机器上,您可能只需要16位。)
或者有什么动态的方法可以做到这一点
有!每个系统上都有一个特殊类型,具有特定于系统的定义,保证:
- 未签名
- 具有适当的大小,以存储可在该系统上操作的任何对象的大小
size\u t
所以你应该写
void do_some_for(size_t size) {
for (size_t i = 0; i < size; i++) {
...
}
}
void do_一些(大小){
对于(大小i=0;i
你应该很好。除非你有充分的理由,否则使用
size\u t
。如果要检查的项目数作为size\u t
值给出,那么计数器也应该是size\u t
,对于未签名的类型应采取通常的预防措施。除非您有充分的理由,否则请使用size\u t
。如果要检查的项目数以size\u t
值给出,则计数器也应为size\u t
,对于未签名的类型应采取通常的预防措施。谢谢您的回答,伙计!当我进行反向迭代时,我介意吗?如果你的意思是,如果你要为(I=n-1;I>=0;I--)编写类似于的东西,你需要担心吗?答案是,是的,你绝对需要担心!如果i
是无符号的,则这是一个无限循环。(幸运的是,好的编译器往往会对这类事情发出警告。)谢谢你的回答,伙计!当我进行反向迭代时,我介意吗?如果你的意思是,如果你要为(I=n-1;I>=0;I--)编写类似于的东西,你需要担心吗?答案是,是的,你绝对需要担心!如果i
是无符号的,则这是一个无限循环。(幸运的是,好的编译器往往会对这类事情发出警告。)