浅谈int8_t int64_t size_t ssize_t的相关问题(详解)
在代码中经常看到int8_t/int16_t/int32_t/int64_t/uint8_t/size_t/ssize_t,以前对这个问题一直是稀里糊涂的,不明白它们到底是什么数据类型,现在上班了,必须把它弄明白了
uint8_t之类
那么_t的意思到底表示什么?具体的官方答案没有找到,不过我觉得有个答案比较接近。它就是一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是其它数据类型。既然它们都不是新的数据类型,只是使用typedef给类型起的别名,那为什么需要定义它们了?因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以让你最有效的维护你的代码。
它们在stdint.h头文件中定义,下面的代码从/usr/include/stdint.h中复制
/*Thereissomeamountofoverlapwith asknownbyinetcode*/ #ifndef__int8_t_defined #define__int8_t_defined typedefsignedcharint8_t; typedefshortintint16_t; typedefintint32_t; #if__WORDSIZE==64 typedeflongintint64_t; #else __extension__ typedeflonglongintint64_t; #endif #endif /*Unsigned.*/ typedefunsignedcharuint8_t; typedefunsignedshortintuint16_t; #ifndef__uint32_t_defined typedefunsignedintuint32_t; #define__uint32_t_defined #endif #if__WORDSIZE==64 typedefunsignedlongintuint64_t; #else __extension__ typedefunsignedlonglongintuint64_t; #endif
看完上面的代码,对uint8_t等就有了清晰明确的认识了
size_t/ssize_t
关于size_t/ssize_t,着急的同学可以先看结论
size_t 无符号整型 32bit系统上等同于unsignedint 64bit系统上等同于unsignedlongint
ssize_t 有符号整型 32bit系统上等同于int 64bit系统上等同于longint
32bit系统中longint为32bit,64bit系统中longint为64bit
可以从/usr/include/sys/types.h一层层查找,最终会找到ssize_t和size_t的定义。
如何判断系统位数
getconfWORD_BIT
getconfLONG_BIT
或者使用uname-a
以上这篇浅谈int8_tint64_tsize_tssize_t的相关问题(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。