là kích thước của một enum luôn luôn giống nhau giữa các trình biên dịch khác nhau (gcc, c trực quan và những người khác?). Đó là, không sizeof() của một enum cụ thể cho các giá trị tương tự với mỗi trình biên dịch theo các tiêu chuẩn C/C++?Kích thước của enums theo byte của các trình biên dịch khác nhau
Trả lời
số
Trong cả hai C và C++ một enum sẽ có một kích thước sao cho tất cả các giá trị có thể được biểu diễn và tương thích với một loại số nguyên. Các trình biên dịch khác nhau có thể sử dụng các thuật toán khác nhau để chọn loại (nếu nó không được chỉ định bởi một tiêu chuẩn khác như ABI được định nghĩa rõ ràng). (C++ 11 cho phép để xác định loại tiềm ẩn với một cú pháp mới)
Không nhất thiết phải: C cho phép loại giá trị điều tra được trình biên dịch lựa chọn, giống như câu trả lời của bạn, thực hiện C++. Xem phần 6.7.2.2/4 trong [Tiêu chuẩn C] (http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf). – pmg
Ngoài ra, trong C++ 0x bạn có thể sử dụng lớp * enum mới * để chỉ định kiểu số nguyên sẽ được sử dụng để trả về các giá trị đếm. –
@pmg, cảm ơn. Tôi không biết tôi đã lấy cái đó ở đâu. Tôi đã kiểm tra nó đã được các trường hợp trong C90. – AProgrammer
"Mỗi loại được liệt kê phải tương thích với char, một loại nguyên ký , hoặc một loại unsigned integer. Sự lựa chọn kiểu là thực hiện được xác định) nhưng có khả năng đại diện cho các giá trị của tất cả các thành viên của điều tra. "
"... Việc triển khai có thể trì hoãn lựa chọn loại số nguyên cho đến khi tất cả các hằng số đếm đã được xem."
ISO/IEC 9899: 1999 (E) p.105
Vì vậy, chúng tôi chỉ có ranh giới trên cho sizeof (enum). Trên hầu hết các hệ thống tôi có sizeof (enum) = 4, nhưng trình biên dịch STM đã tạo sizeof (enum) = 1/2/4 tùy thuộc vào các giá trị được viết trong enum
Edit: có vẻ như bạn có thể đặt một trong các giá trị của enum max int để đảm bảo rằng trình biên dịch chọn số nguyên như kích thước enum.
- 1. gcc được biên dịch với các kích thước khác nhau?
- 2. hành vi trình biên dịch khác nhau khi thêm byte
- 3. Tính kích thước theo byte của một Chuỗi Swift
- 4. Kích thước của mảng byte golang
- 5. Kích thước của con trỏ đến chức năng thành viên khác nhau như điên
- 6. Trình biên dịch xác định kích thước của cấu trúc bitfield như thế nào?
- 7. Cách lấy kích thước của cấu trúc và nội dung của nó theo byte trong golang?
- 8. Đếm kích thước bit/byte của mảng
- 9. Tính kích thước byte của đối tượng Java
- 10. Các kích thước khác nhau của biểu diễn chuỗi trong Java
- 11. Cách nhận kích thước byte của chuỗi nhiều byte
- 12. Kích thước UIBarButtonItem khác nhau
- 13. Cảnh báo sẽ liên tục được kích hoạt trên các trình biên dịch khác nhau?
- 14. Center hai UIViews kích thước khác nhau theo chiều ngang
- 15. Phát triển iPhone - Trình biên dịch của Trình biên dịch!
- 16. Kích thước chuỗi utf-8 Calc theo byte?
- 17. hành vi khác nhau của trình biên dịch với phân bổ mảng
- 18. Làm cách nào để áp dụng các tùy chọn trình biên dịch khác nhau cho các trình biên dịch khác nhau trong cmake?
- 19. Kích thước của một byte trong bộ nhớ - Java
- 20. Thêm các ma trận với các kích thước khác nhau
- 21. Nhận kích thước byte của Danh sách <T>
- 22. phép kích thước bộ nhớ của 268.435.456 byte kiệt sức
- 23. Các tab có kích thước khác nhau trong Android
- 24. Độ dài mysql() cho các ngôn ngữ khác nhau trả về kích thước khác nhau
- 25. Chuỗi chữ trong mẫu - hành vi khác nhau của trình biên dịch
- 26. vòng lặp để mảng có kích thước khác nhau
- 27. Xác định kích thước byte của ma trận scipy.sparse?
- 28. Numpy Array Broadcasting với các kích thước khác nhau
- 29. Đo kích thước chuỗi theo Byte trong php
- 30. Các biểu tượng ActionBar có kích thước khác nhau
Và sự ký kết cũng có thể khác nhau. –