Предположим, что давным-давно я создал следующее перечисление:
typedef enum
{
GeometricPoint,
GeometricLine,
GeometricSquare,
GeometricRectangle,
GeometricCircle
}GeometricFigures;
Я ввел это в свое время в своем потрясающем движке, и теперь я решил, что люди больше не должны использовать GeometricSquare
, поскольку это уже покрыто GeometricRectangle
.
Для начала я мог бы изменить свое перечисление на что-то вроде этого:
typedef enum
{
GeometricPoint,
GeometricLine,
GeometricRectangle,
GeometricSquare = GeometricRectangle,
GeometricCircle
}GeometricFigures;
Это, безусловно, сохранит мой потрясающий двигатель обратно совместимым, но, с другой стороны, увеличит устаревший мусор. Поэтому я хотел бы удалить GeometricSquare
в целом в обозримом будущем. Чтобы сделать это очевидным для пользователей моего движка, я хотел бы отметить GeometricSquare
как устаревший.
Моя цель заключается в том, что документация (doxygen), а также завершение кода (Xcode) и последнее, но не менее важное место в компиляторе (GCC) сделают очевидным для пользователя, что GeometricSquare
больше не нужно использовать и заменяется на GeometricRectangle
.
Для документации я бы просто использовал ключевое слово @deprecated
;
typedef enum
{
GeometricPoint,
GeometricLine,
GeometricRectangle,
///@deprecated Has been replaced by GeometricRectangle
GeometricSquare = GeometricRectangle,
GeometricCircle
}GeometricFigures;
Но как насчет Xcode и GCC?
К сожалению, обычный атрибут GCC (метод), похоже, не выполняет эту работу. Добавление __attribute__((deprecated))
, как показано ниже, вызывает синтаксическую ошибку.
typedef enum
{
GeometricPoint,
GeometricLine,
GeometricRectangle,
GeometricSquare = GeometricRectangle __attribute__((deprecated)),
Проблема с парсером Ожидаемый}
GeometricCircle
}GeometricFigures;
Таким образом, очевидно, что либо не работает вообще, либо я просто использую его неправильно.