我目前正在更改一组在大约40个不同文件中使用的内核API。我该如何重构它们?让旧的API调用新的API是一个好习惯,从而消除了我浏览每个文件并进行更改?通过这样做,我基本上说使用这个API的所有旧代码都很好但更新的代码不应该(虽然没有办法通过代码强制执行此代码)。 #baddesign
答案 0 :(得分:5)
这是一个很好的做法(正如你正确提到的那样)逐步“退出”现有的API以支持新的API;同时继续提供较旧的API以实现向后兼容。
目前,您需要将现有旧API的功能部分标记为已弃用。这可以通过在函数定义期间指定"deprecated" compiler function-attribute来完成,如下所示。
int old_fn () __attribute__ ((deprecated (<optional-msg>)));
现在在编译期间,如果代码的任何部分试图调用已弃用的函数,则会生成警告。警告包含调用不推荐使用的函数的文件和行。此外,如果指定了可选的 msg 参数,它将与警告一起记录到屏幕上。
为了指导使用您的框架的开发人员使用新API,您可以向 msg 字符串添加其他信息。例如,此后推荐的新函数的名称代替不推荐使用的函数。