Chỉ cần tò mò nếu u_char là một tiêu chuẩn. Tôi đã luôn luôn sử dụng nó giả định nó đã được xác định cùng với các loại uintX_t và như vậy. Nhưng tôi thấy một số chuyển đổi cơ sở mã của chúng tôi từ u_char thành "unsigned char" với lý do "do đó người dùng không phải tự xác định u_char" ..u_char có phải là tiêu chuẩn không?
Trả lời
Nó không có trong bất kỳ tệp tiêu đề cũ nào , chẳng hạn như Kerberos và các tiêu đề mạng), và không phải là kiểu tích hợp trong bất kỳ trình biên dịch nào mà tôi biết.
Chuỗi u_char
không xuất hiện trong dự thảo này của tiêu chuẩn C:
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
Nó không theo yêu cầu của một trong hai POSIX, như xa như tôi biết.
Tôi nghĩ rằng đó là trong BSD (sys/types.h) và Windows (winsock.h). Tôi sẽ không xem xét một trong hai là "một tiêu chuẩn" - họ không phải là tiêu chuẩn chính thức, và họ chắc chắn không phải là một phần của tiêu chuẩn C, nhưng họ được xác định rõ ràng và tài liệu.
Hơn nữa vấn đề sử dụng những loại không chuẩn này là bạn phải rất cẩn thận về việc xác định chúng. Một số hệ thống sẽ có chúng được xác định (sai), dẫn đến lỗi nếu bạn tự định nghĩa chúng, nhưng những người khác sẽ không, nghĩa là bạn không thể sử dụng loại trừ khi bạn tự xác định. Cách an toàn nhất là không sử dụng rác như thế này, không được lười biếng, và viết ra 'unsigned char' khi bạn có nghĩa là nó. –
@R .. hoặc sử dụng '
@JonathonReinhart: sử dụng 'uint8_t' có hiệu lực có một xác nhận trong xây dựng rằng' CHAR_BIT == 8', vì loại bị cấm tồn tại nếu 'CHAR_BIT> 8'. Nếu bạn muốn loại 8 bit, nhưng nếu ý bạn là "một loại số nguyên không dấu chiếm một đơn vị lưu trữ trong quá trình thực hiện này, bất kỳ thứ gì có thể là", thì bạn nên nói rằng: 'unsigned char'. –
Không, u_char
không chuẩn. Nếu bạn cần sử dụng loại tiêu chuẩn tương đương với u_char
, bạn có thể sử dụng uint8_t
là một phần của thư viện chuẩn C99 (hãy kiểm tra các nền tảng/trình biên dịch cụ thể của bạn để tuân thủ C99). stdint.h
xác định loại này (cùng với nhiều loại tích phân cụ thể khác). This Wikipedia article contains more information about stdint.h
.
- 1. Tiêu chuẩn mã hóa cho MVC - Chúng có phải là tiêu chuẩn chính thức không?
- 2. Đây có phải là tiêu chuẩn hợp lệ c?
- 3. Tại sao jQuery không phải là tiêu chuẩn W3C?
- 4. Có phải "chính" là tên chi nhánh tiêu chuẩn trong git hay chỉ là thực hành tiêu chuẩn?
- 5. Tiêu chuẩn phải là gì đối với URL ReSTful?
- 6. Truyền một mảng tới hàm tạo Ngày Javascript, có phải là tiêu chuẩn không?
- 7. Chủ đề màu đen và trắng cho Mã QR có phải là tiêu chuẩn không?
- 8. Python không phải là ngôn ngữ chuẩn?
- 9. Có phải C++ 03 là phiên bản mới của tiêu chuẩn C++ hay chỉ là một tiêu chuẩn kỹ thuật (TC) của C++ 98?
- 10. Đường ống vào nhiều tệp, nhưng không phải là tiêu chuẩn
- 11. Có phải sửa đổi các chuỗi ký tự không xác định theo tiêu chuẩn C89 không?
- 12. Có phải tiêu chuẩn cho #if để giả sử các hằng số biểu tượng không xác định là 0 không?
- 13. C++ có hàng đợi tiêu chuẩn không?
- 14. Ant exec: chuyển hướng tiêu chuẩn ra nhưng không phải lỗi chuẩn
- 15. Tại sao không tiêu chuẩn hibernate Tiêu chuẩn generics
- 16. Các tham số mẫu của mẫu template có phải là phần mở rộng hoặc một phần của tiêu chuẩn không?
- 17. Ngoại lệ tiêu chuẩn Scala là gì?
- 18. Có phiên bản memcpy tiêu chuẩn, có cấu trúc không?
- 19. Tại sao không phải là có một chức năng memswap chuẩn
- 20. Lược đồ sao có phải là lược đồ không chuẩn hóa không?
- 21. Tại sao không có Object.setPrototypeOf (...) trong tiêu chuẩn ECMAScript?
- 22. Cách tiêu chuẩn tham gia hai Data.Texts không có `mappend`
- 23. Tại sao không có tiêu chuẩn biểu thức chính quy?
- 24. Hibernate Tiêu chuẩn Subquery
- 25. Xác định loại đối số của hàm sau ")", nó có phải là một tiêu chuẩn rất cũ?
- 26. Python MixIn tiêu chuẩn
- 27. là có một tiêu chuẩn trong viết hoa không gian tên cho Javascript
- 28. Có thể xóa lệnh khỏi Tiêu chuẩn Hibernate không?
- 29. Bản hack này có hợp lệ theo tiêu chuẩn không?
- 30. Có bao nhiêu tệp tiêu đề trong tiêu chuẩn C++?
u_char không phải là một phần của tiêu chuẩn ANSI C chính thức –