Giả sử một thời gian dài trước đây, tôi đã tạo ra kiểu liệt kê sau đây:Làm thế nào để khai báo một giá trị enum như đang bị phản đối trong ObjectiveC (2.0)
typedef enum
{
GeometricPoint,
GeometricLine,
GeometricSquare,
GeometricRectangle,
GeometricCircle
}GeometricFigures;
tôi giới thiệu những một thời gian trước trong động cơ tuyệt vời của tôi và bây giờ tôi đã quyết định cuối cùng rằng mọi người không nên sử dụng GeometricSquare
nữa vì điều đó được bao phủ bởi GeometricRectangle
rồi.
Đối với một sự khởi đầu, tôi sẽ có thể thay đổi kiểu liệt kê của tôi đối với một cái gì đó như thế này:
typedef enum
{
GeometricPoint,
GeometricLine,
GeometricRectangle,
GeometricSquare = GeometricRectangle,
GeometricCircle
}GeometricFigures;
Đó chắc chắn sẽ giữ động cơ tuyệt vời của tôi tương thích ngược nhưng mặt khác làm tăng rác di sản. Do đó, tôi muốn xóa GeometricSquare
hoàn toàn trong tương lai gần. Để làm rõ điều đó với người dùng động cơ của tôi, tôi muốn đánh dấu GeometricSquare
là không được chấp nhận. Mục tiêu của tôi là tài liệu (doxygen) cũng như hoàn thành mã (Xcode) và cuối cùng nhưng không kém phần trình biên dịch (GCC) sẽ làm cho người dùng thấy rõ ràng rằng GeometricSquare
không nên được sử dụng nữa và đã được thay thế bởi GeometricRectangle
.
Đối với tài liệu, tôi chỉ cần sử dụng từ khóa @deprecated
;
typedef enum
{
GeometricPoint,
GeometricLine,
GeometricRectangle,
///@deprecated Has been replaced by GeometricRectangle
GeometricSquare = GeometricRectangle,
GeometricCircle
}GeometricFigures;
Nhưng làm thế nào về Xcode và GCC?
Thật không may, thuộc tính GCC (phương pháp) thông thường dường như không thực hiện công việc. Việc thêm __attribute__((deprecated))
như được soạn thảo bên dưới sẽ gây ra lỗi cú pháp.
typedef enum
{
GeometricPoint,
GeometricLine,
GeometricRectangle,
GeometricSquare = GeometricRectangle __attribute__((deprecated)),
Parse Issue Dự kiến}
GeometricCircle
}GeometricFigures;
Vì vậy, rõ ràng rằng hoặc không hoạt động hoàn toàn hoặc chỉ đơn giản là tôi đang sử dụng nó sai.
thể trùng lặp của [C++ đánh dấu enum giá trị như không được chấp nhận?] (http://stackoverflow.com/questions/5488057/c-mark-enum-value-as-deprecated) – lpapp