天天看點

uint8_t範圍_uint8_t / uint16_t / uint32_t /uint64_t 是什麼資料類型 - 大總結,看完全明白了...

轉自:http://blog.csdn.net/kiddy19850221/article/details/6655066

uint8_t / uint16_t / uint32_t /uint64_t  是什麼資料類型

在nesc的代碼中,你會看到很多你不認識的資料類型,比如uint8_t等。咋一看,好像是個新的資料類型,不過C語言(nesc是C的擴充)裡面好像沒有這種資料類型啊!怎麼又是u又是_t的?很多人有這樣的疑問。論壇上就有人問:以*_t結尾的類型是不是都是long型的?在baidu上查一下,才找到答案,這時才發覺原來自己對C掌握的太少。

那麼_t的意思到底表示什麼?具體的官方答案沒有找到,不過我覺得有個答案比較接近。它就是一個結構的标注,可以了解為type/typedef的縮寫,表示它是通過typedef定義的,而不是其它資料類型。

uint8_t,uint16_t,uint32_t等都不是什麼新的資料類型,它們隻是使用typedef給類型起的别名,新瓶裝老酒的把戲。不過,不要小看了typedef,它對于你代碼的維護會有很好的作用。比如C中沒有bool,于是在一個軟體中,一些程式員使用int,一些程式員使用short,會比較混亂,最好就是用一個typedef來定義,如:

typedef char bool;

一般來說,一個C的工程中一定要做一些這方面的工作,因為你會涉及到跨平台,不同的平台會有不同的字長,是以利用預編譯和typedef可以讓你最有效的維護你的代碼。為了使用者的友善,C99标準的C語言硬體為我們定義了這些類型,我們放心使用就可以了。

按照posix标準,一般整形對應的*_t類型為:

1位元組     uint8_t

2位元組     uint16_t

4位元組     uint32_t

8位元組     uint64_t

附:C99标準中inttypes.h的内容

00001

00017

00018 #ifndef __INTTYPES_H_

00019 #define __INTTYPES_H_

00020

00021

00023

00024 typedefsigned char int8_t;

00025 typedefunsigned char uint8_t;

00026

00027 typedefint int16_t;

00028 typedefunsigned int uint16_t;

00029

00030 typedeflong int32_t;

00031 typedefunsigned long uint32_t;

00032

00033 typedeflong long int64_t;

00034 typedefunsigned long long uint64_t;

00035

00036 typedefint16_t intptr_t;

00037 typedefuint16_t uintptr_t;

00038

00039 #endif