Có cách nào gán giá trị cho enums trong thời gian chạy trong mục tiêu c không? Tôi có một số enums và muốn mỗi enum có giá trị nhất định. Các giá trị có thể được đọc từ một tệp xml. Có cách nào để làm việc này không?Thay đổi giá trị enum khi đang chạy?
6
A
Trả lời
16
Unfortunatley, @Binyamin là chính xác, bạn không thể thực hiện điều này bằng enum. Vì lý do này, tôi thường làm như sau trong các dự án của tôi:
// in .h
typedef int MyEnum;
struct {
MyEnum value1;
MyEnum value2;
MyEnum value3;
} MyEnumValues;
// in .m
__attribute__((constructor))
static void initMyEnum()
{
MyEnumValues.value1 = 10;
MyEnumValues.value2 = 75;
MyEnumValues.value3 = 46;
}
này cũng có lợi thế của việc có thể để lặp qua các giá trị, đó là không thể với một enum bình thường:
int count = sizeof(MyEnumValues)/sizeof(MyEnum);
MyEnum *values = (MyEnum *) &MyEnumValues;
for (int i = 0; i < count; i++)
{
printf("Value %i is: %i\n", i, values[i]);
}
Tất cả trong tất cả, đây là cách ưa thích của tôi để làm enums trong C.
5
Không, thông tin enums bị xóa tại thời gian biên dịch.
+4
Thật không may đây là trường hợp. Tuy nhiên bạn có thể sử dụng cấu trúc thay vì một enum nếu bạn muốn giữ thông tin .. –
Các vấn đề liên quan
- 1. Thay đổi giá trị cài đặt khi đang di chuyển?
- 2. Giá trị cháy JListChỉ thay đổi hai lần khi giá trị được thay đổi qua chuột
- 3. Thay đổi giá trị của một giá trị ENUM MySQL, trong suốt một bảng
- 4. Thay đổi kích thước cột JQGrid khi đang chạy
- 5. Thay đổi màu nền gradient trên Android khi đang chạy
- 6. KnockOut chạy chức năng trên giá trị thay đổi
- 7. Giá trị thay đổi SQL
- 8. Giá trị không chính xác khi lưu enum
- 9. EnumMap vs Enum giá trị
- 10. Bạn có thể thay đổi giá trị cấu hình ConnectionString khi chạy không?
- 11. Thay đổi giá trị max_heap_table_size?
- 12. vb.net Thêm Xem dừng khi giá trị thay đổi
- 13. Cách phát hiện khi biến thay đổi giá trị
- 14. Chuyển đổi chuỗi thành giá trị Enum tương đương
- 15. Cách thay đổi/đặt giá trị DateTimePicker
- 16. Thay đổi giá trị mẫu sau khi tải trong Mongoose
- 17. Thay đổi giá trị trong khi lặp lại trong golang
- 18. PIL thay đổi giá trị pixel khi lưu
- 19. Android NumberPicker kết thúc tốt đẹp giá trị khi hiển thị giá trị được thay đổi
- 20. Java tùy chỉnh giá trị enum enum để
- 21. thay đổi trường nhập jquery ngay cả khi giá trị được thay đổi thông qua jquery
- 22. Lấy giá trị số nguyên từ enum
- 23. Cách lấy giá trị số từ Enum?
- 24. Nhận tên Enum dựa trên giá trị Enum
- 25. Tự động thay đổi giá trị chọn
- 26. Giá trị enum lẻ trong Windows.Forms.MouseButtons
- 27. Thay đổi enum hiển thị
- 28. Giá trị mặc định enum cho giá trị chú thích enum Java
- 29. Enum giá trị va chạm với tên enum
- 30. Kích hoạt backbone.js thay đổi khi giá trị không thay đổi
@ Richard .. bạn có thể giải thích __attribute __ ((constructor)) là gì .. cảm ơn bạn đã trả lời mặc dù –
@learningDroid đó là một Phần mở rộng GCC, cho phép bạn tạo ra một hàm được gọi ngay trước khi tải đích (trong một dylib, nó sẽ là trước khi hàm đầu tiên từ dylib được chạy, trong một ứng dụng, nó nằm ngay trước 'main()') . Một cấu trúc rất hữu ích, và miễn là bạn không nâng vật nặng trong đó, bạn sẽ ổn thôi. –
Tôi đang lập kế hoạch để đọc một tập tin xml và gán giá trị cho enums trong một cấu trúc. Bạn có nghĩ rằng điều này sẽ quá nặng trong phương pháp __attribute –