Предположим, что давным-давно я создал следующее перечисление:
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 (method)не работает. Добавление __attribute__((deprecated))
, как показано ниже, вызывает синтаксическую ошибку.
typedef enum
{
GeometricPoint,
GeometricLine,
GeometricRectangle,
GeometricSquare = GeometricRectangle __attribute__((deprecated)),
Анализ проблемы Ожидается }
GeometricCircle
}GeometricFigures;
Очевидно, что либо это не работает вообще, либо я просто использую его неправильно.