假设很久以前,我创建了以下枚举:
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)),
Parse Issue Expected }
GeometricCircle
}GeometricFigures;
很明显,要么完全不起作用,要么我只是用错了。
最佳答案
我认为您将 __attribute__
位附加到赋值运算符的错误一侧。这似乎工作正常:
typedef enum
{
GeometricPoint,
GeometricLine,
GeometricRectangle,
GeometricSquare __attribute__((deprecated)) = GeometricRectangle,
GeometricCircle
}GeometricFigures;
现在分配 GeometricSquare
会给出编译器警告:
int fig = GeometricSquare; //'GeometricSquare' is deprecated
关于objective-c - 如何在 ObjectiveC (2.0) 中声明枚举值已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165920/