Tôi đề nghị rằng nếu trình biên dịch của bạn hỗ trợ nó sử dụng các loại tiêu đề C99<stdint.h>
như uint8_t
và int8_t
.
Nếu trình biên dịch của bạn không hỗ trợ, hãy tạo một trình biên dịch. Here's ví dụ về VC++, các phiên bản cũ hơn không có stdint.h
. GCC không hỗ trợ stdint.h
, và hầu hết C99
Một vấn đề với đề nghị của bạn là dấu hiệu của char
là thực hiện được xác định, vì vậy nếu bạn tạo một loại bí danh. bạn nên ít nhất là rõ ràng về các dấu hiệu. Có một số công đức trong ý tưởng kể từ trong C# ví dụ: char
là 16bit. Nhưng nó cũng có một kiểu byte.
lưu ý bổ sung ...
Không có vấn đề với đề nghị của bạn, bạn đã làm trong thực tế chỉ định unsigned.
Tôi cũng khuyên rằng đồng bằng char
được sử dụng nếu dữ liệu trong dữ liệu ký tự thực tế, tức là đại diện cho văn bản thuần túy như bạn có thể hiển thị trên bảng điều khiển.Điều này sẽ trình bày ít vấn đề về thỏa thuận loại hơn khi sử dụng thư viện tiêu chuẩn và bên thứ ba. Mặt khác, dữ liệu đại diện cho một thực thể không phải ký tự như bitmap hoặc nếu nó là dữ liệu số nguyên nhỏ mà bạn có thể thực hiện thao tác số học hoặc dữ liệu mà bạn sẽ thực hiện các thao tác logic, sau đó một trong các Các loại stdint.h
(hoặc thậm chí một loại được xác định từ một trong số chúng) nên được sử dụng.
tôi gần đây đã bị bắt trên một TI C54xx biên dịch, nơi char
là trong thực tế 16bit, vì vậy đó là lý do tại sao sử dụng stdint.h nếu có thể, ngay cả khi bạn sử dụng nó để sau đó xác định một loại byte
là thích hợp hơn để giả sử rằng unsigned char
là một bí danh phù hợp.
Tôi không thực sự được bán trên yêu cầu tiêu đề tăng chỉ dành cho typedef. –
Lưu ý rằng trong khi stdint.h được định nghĩa bởi C99, không có yêu cầu theo tiêu chuẩn ISO C++ hiện tại (vì nó có trước C99), vì vậy bạn có thể tìm thấy trong một số trình biên dịch, bạn phải sử dụng quy ước C cho tên tiêu đề. các loại, và đó sẽ là hình thức di động nhất. –
Clifford