說明符 + 限定符linux
signed char 有符號字符 unsigned char 無符號字符 char 字符(能夠是 signed char 或 unsigned char,由實現定義) // 除此以外,還定義了寬字符(c11): 1. wchar_t 2. char16_t 3. char32_t
1. 短整形緩存
short signed short short int signed short int // 等價於 short int
2. 無符號短整形多線程
unsigned short unsigned short int // 等價於 unsigned short int
3. 整形併發
signed int signed int // 等價於 int
4. 無符號整形atom
unsigned unsigned int // 等價於 unsigned int
5. 長整型線程
long long int signed long signed long int // 等價於 long int
6. 無符號長整型unix
unsigned long unsigned long int // 等價於 unsigned long int
7. long long int(c99,不懂該怎麼稱呼了...)指針
long long long long int signed long long signed long long int // 等價於 long long int
8. unsigned long long int(c99)rest
unsigned long long unsigned long long int // 等價於 unsigned long long int
數據模型code
每種實現對數據類型的大小選擇統稱爲 數據模型,如下四種是你們廣泛接受的數據模型:
32 System
1. LP32 2/4/4,(int 16bit,long & pointer 32bit) 1. 僅出如今 win16 API 中 2. LP32 4/4/4,(int,long,pointer 32bit) 1. win32 API 2. 類 unix 系統(linux or mac)
64 System
3. LP64 4/4/8,(int & long 32big,pointer 64 bit) 4. LP64 4/8/8,(int 32 bit,long & pointer 64 bit)
其餘模型很是罕見(幾乎能夠不用理會,實際就是無需理會)!舉一個例子,數據模型 LP64 8/8/8(int & long & pointer 64 bit),這種數據模型只出如今早期的 unix 機器上
1. float 單精度浮點型 32bit(4byte) 2. double 雙精度浮點型 64bit(8byte) 3. long double 擴展精密浮點型(須要機器支持) >=64 bit
若是使用了 complex.h
,表示須要用到複雜的浮點數
如下寫法都是有效的:
float _complex float complex double _complex double complex long double _complex long double complex float _imaginary float imaginary double _imaginary double imaginary long double _imaginary long double imaginary
支持如下三種寫法:
// p 是指向原子 const int 的指針 _Atomic const int * p1; // 同上 const atomic_int * p2; // 同上 const Atomic(int) * p3;
原子類型的對象是惟一不受數據競爭的對象,也就是說,它們能夠由兩個線程併發地修改,或者由另外一個線程修改。
擁有如下四個相關屬性:
1. 寫入一致性(write-write-coherence) 2. 讀取一致性(read-read-coherence) 3. 讀寫一致性(read-write-coherence) 4. 寫讀一致性(write-read-coherence)
具體解釋參考官方文檔:atomic type
目前的 visual studio
中不支持該類型
// 聲明 int_t 是 int 的別名 typedef int int_t // 進階 // char_t 是 char 的別名 // chart_p 是 char* 的別名 // fp 是 char(*)(void) 的別名 typedef char char_t, *char_p, (*fp)(void)
const
// 常量不可改動 const int a = 10;
volatile
// 提醒計算機: // a 變量可能會實時更新,不能緩存 // 這個通常多用在多線程場景下 volatile int a = 10;
restrict
特殊的常量
INFINITY 無窮 NaN 非數字
若是須要準確的瞭解到數值的範圍,請參閱(頁面底部):各類類型對應的數值範圍