Questions tagged «size-t»

13
C语言中的size_t是多少?
我size_t对C 感到困惑。我知道它是由sizeof运算符返回的。但是到底是什么呢?它是数据类型吗? 假设我有一个for循环: for(i = 0; i < some_size; i++) 我应该使用int i;还是size_t i;?
626 c  int  size-t 

8
无符号整数与size_t
我注意到,现代C和C ++代码似乎在所有地方都使用/ size_t而不是使用-从C字符串函数的参数到STL。我对此的原因及其带来的好处感到好奇。intunsigned int
492 c++  c  size-t 

7
size_t与uintptr_t
C标准保证该size_t类型可以容纳任何数组索引。从逻辑上讲,这意味着size_t应该能够容纳任何指针类型。我在Google上发现的一些网站上读到这是合法的,并且/或者应该一直有效: void *v = malloc(10); size_t s = (size_t) v; 因此,在C99中,该标准引入了intptr_t和uintptr_t类型,保证可以容纳指针的有符号和无符号类型: uintptr_t p = (size_t) v; 那么使用size_t和之间有什么区别uintptr_t?两者都是无符号的,并且都应该能够容纳任何指针类型,因此它们在功能上似乎相同。除了清晰度之外,是否有任何真正令人信服的理由使用uintptr_t(或更好的是void *)而不是size_t?在不透明的结构中,该字段仅由内部函数处理,是否有任何理由不这样做呢? 出于同样的原因,ptrdiff_t它是一个有符号的类型,能够保存指针差异,因此能够保存大多数指针,那么它与intptr_t有何区别? 所有这些类型难道不是都为同一个功能提供了完全不同的版本吗?如果没有,为什么?我不能对其中一个进行处理,而对另一个却不能进行处理?如果是这样,为什么C99在该语言中添加了两种本质上多余的类型? 我愿意忽略函数指针,因为它们不适用于当前问题,但是我可以随意提及它们,因为我有一个偷偷摸摸的怀疑,它们将是“正确”答案的核心。
246 c  pointers  size-t 

13
何时使用std :: size_t?
我只是想知道我应该使用std::size_t循环和东西而不是int?例如: #include <cstdint> int main() { for (std::size_t i = 0; i < 10; ++i) { // std::size_t OK here? Or should I use, say, unsigned int instead? } } 通常,关于何时使用的最佳实践是什么std::size_t?


9
在C ++中将代码清除为printf size_t(或:在C ++中与C99的%z最接近)
我有一些C ++代码可以显示size_t: size_t a; printf("%lu", a); 我希望在32位和64位体系结构上进行编译而不会发出警告。 如果这是C99,则可以使用printf("%z", a);。但是AFAICT %z在任何标准C ++方言中都不存在。所以我要做 printf("%lu", (unsigned long) a); 这真的很丑。 如果size_t语言中没有内置的用于打印s的功能,我想知道是否有可能编写一个printf包装器或诸如此类的东西,以便在size_ts 上插入适当的强制转换,从而消除虚假的编译器警告,同时仍保持良好的警告。 有任何想法吗? 编辑以弄清为什么我使用printf:我有一个相对较大的代码库正在清理。它使用printf包装器执行“写警告,将其记录到文件中,并可能由于错误而退出代码”之类的操作。我也许能够使用cout包装器来聚集足够的C ++-foo,但是我不想改变程序中的每个warn()调用只是为了摆脱一些编译器警告。
96 c++  printf  size-t 

3
与平台无关的size_t在c中的格式说明符?
我想打印出size_tC中类型的变量,但它似乎size_t是别名,它是不同体系结构上的不同变量类型。例如,在一台计算机(64位)上,以下代码不会引发任何警告: size_t size = 1; printf("the size is %ld", size); 但是在我的另一台计算机(32位)上,以上代码会产生以下警告消息: 警告:格式'%ld'期望类型为'long int *',但是参数3的类型为'size_t *' 我怀疑这是由于指针大小的差异所致,因此在我的64位计算机size_t上别名为long int("%ld"),而在我的32位计算机size_t上别名为另一种类型。 是否有专门用于格式的说明符size_t?

5
什么是找到size_t最大值的可移植方法?
我想知道我的程序正在运行的系统上size_t的最大值。我的第一个本能是使用负1,如下所示: size_t max_size = (size_t)-1; 但是我猜想有更好的方法,或者在某个地方定义一个常量。
74 c  size-t 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.