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