假设很久以前,我创建了以下枚举:
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}}
很明显,要么完全不起作用,要么我只是错误地使用它。
答案 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,
};