2

我目前正在更改一组用于大约 40 个不同文件的内核 API。我该如何重构它们?让旧的 API 调用新的 API 从而消除我遍历每个文件并进行更改是一种好习惯吗?通过这样做,我实质上是说所有使用此 API 的旧代码都可以,但新代码不应该(尽管无法通过代码强制执行此操作)。#糟糕的设计

4

1 回答 1

5

逐渐“淘汰”现有 API 以支持新 API 是一种很好的做法(正如您正确提到的);同时继续提供旧的 API 以实现向后兼容性。

目前,您需要将现有旧 API 的函数部分标记为deprecated。这可以通过在函数定义期间指定deprecated ”编译器函数属性来完成,如下所示。

int old_fn () __attribute__ ((deprecated (<optional-msg>)));

现在在编译期间,如果代码的任何部分尝试调用已弃用的函数,则会生成警告。警告包含调用已弃用函数的文件。此外,如果指定了可选的msg参数,它将与警告一起记录到屏幕上。

为了引导使用您的框架的开发人员使用新的 API,您可以向msg字符串添加其他信息。例如,今后推荐代替已弃用函数的新函数的名称。

于 2013-08-14T05:20:34.720 回答