程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 淺談int8_t int64_t size_t ssize_t的相關問題(詳解)

淺談int8_t int64_t size_t ssize_t的相關問題(詳解)

編輯:關於C++

淺談int8_t int64_t size_t ssize_t的相關問題(詳解)。本站提示廣大學習愛好者:(淺談int8_t int64_t size_t ssize_t的相關問題(詳解))文章只能為提供參考,不一定能成為您想要的結果。以下是淺談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中復制

<span >

/* There is some amount of overlap with <sys/types.h> as known by inet code */

#ifndef __int8_t_defined
# define __int8_t_defined
typedef signed char       int8_t;
typedef short int        int16_t;
typedef int           int32_t;
# if __WORDSIZE == 64
typedef long int        int64_t;
# else
__extension__
typedef long long int      int64_t;
# endif
#endif

/* Unsigned. */
typedef unsigned char      uint8_t;
typedef unsigned short int   uint16_t;
#ifndef __uint32_t_defined
typedef unsigned int      uint32_t;
# define __uint32_t_defined
#endif
#if __WORDSIZE == 64
typedef unsigned long int    uint64_t;
#else
__extension__
typedef unsigned long long int uint64_t;
#endif</span>

看完上面的代碼,對uint8_t等就有了清晰明確的認識了

size_t/ssize_t

關於size_t/ssize_t,著急的同學可以先看結論
size_t  無符號整型 32bit系統上等同於unsigned int   64bit系統上等同於unsigned long int

ssize_t 有符號整型 32bit系統上等同於int   64bit系統上等同於long int

32bit系統中 long int為32bit,64bit系統中 long int為64bit

可以從/usr/include/sys/types.h一層層查找,最終會找到ssize_t和size_t的定義。

如何判斷系統位數

getconf WORD_BIT

getconf LONG_BIT

或者使用uname -a

以上這篇淺談int8_t int64_t size_t ssize_t的相關問題(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved