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