假设很久以前我创建了以下枚举:
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;
显然,这要么完全行不通,要么我使用方法不正确。