【发布时间】:2012-04-27 07:10:00
【问题描述】:
假设很久以前,我创建了以下枚举:
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)),
解析问题 预期 }
GeometricCircle
}GeometricFigures;
很明显,要么完全不起作用,要么我只是用错了。
【问题讨论】:
标签: objective-c enums deprecated