如何在NetBC中声明枚举值为弃用(2.0)

时间:2012-04-15 20:44:15

标签: objective-c enums deprecated

假设很久以前,我创建了以下枚举:

typedef enum
{
   GeometricPoint,
   GeometricLine,
   GeometricSquare,
   GeometricRectangle,
   GeometricCircle
}GeometricFigures;

我刚才在 awesome引擎中介绍了这些内容,现在我终于决定不再使用GeometricSquare,因为GeometricRectangle已经覆盖了typedef enum { GeometricPoint, GeometricLine, GeometricRectangle, GeometricSquare = GeometricRectangle, GeometricCircle }GeometricFigures; 。 / p>

首先,我可能会将我的枚举改为:

GeometricSquare

这肯定会使我的 awesome引擎向后兼容,但另一方面会增加传统垃圾。因此,我想在可预见的将来完全删除GeometricSquare。为了让我的引擎用户明白这一点,我想将GeometricSquare标记为已弃用。

我的目标是文档(doxygen)以及代码完成(Xcode)以及最后但并非最不重要的编译器(GCC)将使用户明白不再使用GeometricRectangle并且已被@deprecated取代。

对于文档,我只使用typedef enum { GeometricPoint, GeometricLine, GeometricRectangle, ///@deprecated Has been replaced by GeometricRectangle GeometricSquare = GeometricRectangle, GeometricCircle }GeometricFigures; 关键字;

__attribute__((deprecated))

但Xcode和GCC怎么样?

不幸的是,通常的GCC(方法)属性似乎不起作用。如下所述,添加typedef enum { GeometricPoint, GeometricLine, GeometricRectangle, GeometricSquare = GeometricRectangle __attribute__((deprecated)), 会导致语法错误。

   GeometricCircle
}GeometricFigures;
  

解析问题   预期}

{{1}}

很明显,要么完全不起作用,要么我只是错误地使用它。

2 个答案:

答案 0 :(得分:19)

我认为您将__attribute__位附加到赋值运算符的错误一侧。这似乎工作正常:

typedef enum
{
   GeometricPoint,
   GeometricLine,
   GeometricRectangle,
   GeometricSquare __attribute__((deprecated)) = GeometricRectangle,
   GeometricCircle
}GeometricFigures;

现在分配GeometricSquare会给出编译器警告:

int fig = GeometricSquare;    //'GeometricSquare' is deprecated

答案 1 :(得分:16)

稍后会添加一个便利宏:

typedef NS_ENUM(NSInteger, GeometricFigures)
{
   GeometricPoint,
   GeometricLine,
   GeometricRectangle,
   GeometricSquare __deprecated_enum_msg("Squares are for squares. Use GeometricRectangle.") = GeometricRectangle,
   GeometricCircle,
};