Tag: size t

size_t的最大大小

我知道在C返回类型的sizeof运算符是size_t是定义的无符号整数类型。 这意味着它的最大尺寸应为65535如C99标准7.18.3所述 : limit of size_t SIZE_MAX 65535 但是在gcc-4.8.2头文件中, stdint.h定义了它的大小远大于65535与C99标准中规定的相反,如下所示, /* Limit of `size_t’ type. */ # if __WORDSIZE == 64 # define SIZE_MAX (18446744073709551615UL) # else # define SIZE_MAX (4294967295U) # endif 请帮助我理解为什么在我的误解背后存在差异或原因。

减去2 size_t的类型是什么?

C中应该使用哪种类型来表示两个对象大小之间的差异? 由于size_t是无符号的,所以类似于 size_t diff = sizeof (small_struct) – sizeof (big_struct); 显然不正确,在我看来,没有真正的签名等价物。 ptrdiff_t听起来有点诱人,但是 就像它的名字所说的那样,它用于减去指针。 我已经读过,例如像DOS这样的分段平台的最大对象大小为64k,可以用16位表示。 然而,远指针由16位段值和16位偏移值组成。 难道不会在这样的32位平台上制作ptrdiff_t吗? 如果是这样,两个对象之间的差异只需要16位,但使用ptrdiff_t会得到一个32位宽的变量,使其不是最佳的。 那么,什么是适合这种价值的便携式? Edit:我知道ssize_t,但它是 不属于标准C. 实际上并非打算用于此类用途,而是用于返回大小或(负)错误值。

C:为什么size_t不是C关键字?

sizeof是一个C 关键字 。 它返回名为size_t的类型的大小。 但是, size_t 不是关键字,而是主要在stddef.h定义,也可能是其他C标准头文件。 考虑一种情况,您希望创建一个不包含任何C标准头文件或库的C程序。 (例如,如果你正在创建一个OS内核。)现在,在这样的代码中,可以使用sizeof (它是一个C关键字,因此它是语言的一部分),但它返回的类型( size_t )不可用! 这不是C标准规范中的某种问题吗? 你能澄清一下吗?

如何在mingw-w64 gcc 7.1中无需警告地打印size_t?

我在nuwen.net上使用minGW的mingw-w64(x64)分支。 这是来自7.1版本的gcc: gcc –version gcc (GCC) 7.1.0 我正在编译这个程序: #include int main(void) { size_t a = 100; printf(“a=%lu\n”,a); printf(“a=%llu\n”,a); printf(“a=%zu\n”,a); printf(“a=%I64u\n”,a); } 有警告和c11标准: gcc -Wall -Wextra -Wpedantic -std=c11 test_size_t.c 我收到这些警告: test_size_t.c: In function ‘main’: test_size_t.c:6:14: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘size_t {aka long long unsigned int}’ […]