我们有一个大型C++项目,启用了警告作为错误。我们想弃用一些旧的API,当然我们的第一个想法是转向[[deprecated]]
语言功能。然而,这会触发一个-Wdeprecated-declarations
警告,该警告会变为错误并导致构建失败。
现在,我们知道我们可以通过-Wno-error=deprecated-declarations
禁用该特定警告的错误。但是,构建日志中仍然会充满编译器警告,这使得发现真正的编译器错误变得更加困难。
我想知道,在现实世界中的大型项目中,人们是否有更好的解决方案来处理实践中的C++弃用?
好吧,你不能既吃蛋糕又吃蛋糕:如果你不想使用不推荐使用的函数来抛出错误(这可能很好(,但也不想看到警告-为什么要首先使用它们呢?
您可以按数字抑制单个警告(有关VC++解决方案,请参阅此处:https://stackoverflow.com/a/7159392/20213170),但正确的方法实际上只是去掉不推荐使用的函数调用并更新API。
这是一种天真的方法,但你不能做一些类似的事情吗:
#ifdef WARNING_DEPRECATED_ON
# define ATT_DEPRECATED __attribute__ ((deprecated))
#else
# define ATT_DEPRECATED
#endif
您可以在本地进行一次提交,在其中弃用api,验证提交没有构建,然后进行另一次提交以删除对弃用api的使用。
如果你不能推送一个失败的构建,那么在这一点上,你可以将这两个本地提交压缩为一个"提交";删除不推荐使用的api";犯罪
但构建日志中仍然会充满编译器警告,这使得发现真正的编译器错误变得更加困难。
这并不完全正确。有一大堆-Wdeprecated-declarations
警告,但任何其他错误都会导致构建失败。在构建日志中ctrl-f "error:"
并不难。