Как объявить значение перечисления устаревшим в ObjectiveC (2.0)

Предположим, что давным-давно я создал следующее перечисление:

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;

Очевидно, что либо это не работает вообще, либо я просто использую его неправильно.

15
задан Till 15 April 2012 в 20:44
поделиться