2013-06-05 91 views
26

differnce giữa UInt8uint8_t hoặc UInt16unit16_t là gì?Whats sự khác biệt giữa UInt8 và uint8_t

_t có nghĩa là gì?

+3

'_t' = Triển khai nền tảng chéo của loại dữ liệu chuẩn. – sgarizvi

+0

Tôi nghĩ '_t' là viết tắt của' type' và nó là một quy ước được sử dụng trên các hệ thống Linux và ở nhiều nơi trong tiêu chuẩn 'C' và' C++ '. Sự khác biệt giữa 'Uint8' và' uint8_t' sẽ phụ thuộc vào việc triển khai thực hiện, nhưng thường thì cả hai sẽ là số nguyên không dấu 8 bit. Ngoài ra 'uint8_t' và' uint16_t' được xác định bởi tiêu chuẩn C (và có thể C++) trong tiêu đề 'stdint.h',' Uint8' và 'Uint16' không chuẩn theo như tôi biết. – jcxz

Trả lời

28

Trong C99, các kiểu số nguyên cơ bản có sẵn (các số nguyên không có _t) được coi là không đủ, vì kích thước thực của chúng có thể khác nhau trên các hệ thống khác nhau.

Vì vậy, chuẩn C99 bao gồm các định nghĩa về một số loại số nguyên mới để nâng cao tính di động của các chương trình. Các loại mới đặc biệt hữu ích trong môi trường nhúng.

Tất cả các loại mới đều có dấu _t và được bảo đảm được xác định thống nhất trên tất cả các hệ thống.

Để biết thêm thông tin, hãy xem fixed-width integer types section of the wikipedia article on Stdint.

+1

'uint8_t' và' uint16_t' thực sự là một phần của C99. Điều đó nói rằng, nhu cầu về kích thước cố định trước C99, vì vậy các cơ sở mã khác nhau xử lý nhu cầu này bằng cách cung cấp các kiểu riêng của chúng. OS X định nghĩa 'UInt8' và' UInt16' trong /usr/include/MacTypes.h. –

+0

"Tất cả các loại mới đều có dấu _t và được bảo đảm được xác định thống nhất trên tất cả các hệ thống." không đúng, có '(u) int_leastN_t' và' (u) int_fastN_t'. Bạn chỉ có nghĩa là các loại chiều rộng cố định. –

+0

Thực ra, tôi không cố nói bất cứ điều gì về kích thước của chúng giống nhau trên tất cả các hệ thống. Kích thước thực tế chỉ được đảm bảo thống nhất cho các loại có độ rộng cố định (chiều rộng chính xác) như bạn đề cập. Tuy nhiên, các định nghĩa giống nhau trên tất cả các hệ thống. Ví dụ int_leastN_t được định nghĩa là loại nhỏ nhất có sẵn trong việc thực hiện.Định nghĩa là như nhau bất kể hệ thống. – vdbuilder

0

thông thường chúng được sử dụng làm kiểu dữ liệu typedef. "_t" đứng cho một kiểu dữ liệu typedef. chúng tôi cung cấp tên như vậy để chúng có thể được sử dụng và đọc dễ dàng trên tất cả các tệp hoặc cơ sở mã lớn.

* uint8 và uint8_t - Char *

typedef unit8_t char unsigned

* uint16 và unit16_t *

typedef unit16_t unsigned int (trên một trình biên dịch 16 bit)

0

Sự khác biệt chính là các loại uintX_t là tiêu chuẩn C được xác định bởi C99 và sau đó trong khi UIntX thì không. Điều này có ý nghĩa đối với cách mã di động. Mã sử ​​dụng uintX_t các loại có thể được biên dịch trên bất kỳ trình biên dịch C chuẩn nào mà không có bất kỳ phụ thuộc nào khác. Mặt khác, mã sử dụng UIntX phải tự xác định các loại đó hoặc tùy thuộc vào một số thư viện hoặc khung làm việc.

Tôi không nghĩ Objective-C như vậy xác định bất kỳ loại số nguyên phụ nào, nhưng cũng có thể là khung công tác của bạn (Coacoa, OpenStep?) Sẽ làm như vậy. Nếu mã của bạn không có ý nghĩa bên ngoài khung công tác, hãy sử dụng thành ngữ nào trong ngữ cảnh khung công tác. Nếu không, hãy cố gắng tuân theo các loại tiêu chuẩn.

Các vấn đề liên quan