写代码的时候常常会用到这些这些off_t, time_t这样的数据类型,转了一份老外的代码。
#define _FILE_OFFSET_BITS 64
#include <inttypes.h>
#include <limits.h>
#include <stdio.h>
#include <time.h> /* for time_t */
#include <sys/types.h> /* for off_t */
#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
#define TYPE_MAX(t) \
((t) (! TYPE_SIGNED (t) \
? (t) -1 \
: ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
int main(void)
{
uint32_t uint32=0xffffFFFF;
uintmax_t uintmax=UINTMAX_MAX;
off_t offset=TYPE_MAX(off_t); /* Depends on _FILE_OFFSET_BITS */
time_t time=TYPE_MAX(time_t); /* May be float! */
size_t size=TYPE_MAX(size_t); /* Depends on int size */
printf("native int bits%20u %16x\n", sizeof(int)*CHAR_BIT, UINT_MAX);
printf("uint32_t max %20"PRIu32" %16"PRIx32"\n"
"uintmax_t max %20ju %16jx\n" /* try PRIuMAX if %ju unsupported */
"off_t max %20jd %16jx\n" /* try PRIdMAX if %jd unsupported */
"time_t max %20jd %16jx\n"
"size_t max %20zu %16zx\n",
uint32, uint32,
uintmax, uintmax,
(intmax_t)offset, (intmax_t)offset,
(intmax_t)time, (intmax_t)time,
size, size);
return 0;
}
原文链接:
http://www.pixelbeat.org/programming/gcc/int_types/