我特别关注utarray版本2.0.2与1.9.6。 (最新版权分别为2017年和2012年)。
我需要将uthash.h添加到使用utarray.h的现有项目中,并且宁愿这两个标题来自相同的版本/提交,所以我考虑用更换旧的utarray.h较新的。
我应该注意到我并不十分关注编译时不兼容性,例如名称更改等。我主要担心的是运行时断裂。
答案 0 :(得分:1)
如果你看一下utarray.h,你会发现它所定义的只是宏,一些静态函数和一些typedef;没有公共符号,所以一切都应该限制在当前的编译单元。
换句话说,是的,只要您不在同一个文件中包含两个标头(这可能会导致编译时错误)或在公共API中公开它,您就应该是安全的。
那就是说,你标题中问题的答案是" no&#34 ;; API中的不兼容更改会破坏向后兼容性。但是你在体内提到的限制应该没问题。
答案 1 :(得分:0)
关于使用utarray的一个罕见但100%可重现的堆栈损坏问题导致我尝试升级,JUST utarray.h,但我公司全面升级。
简答为NO,不是100%向后兼容。但它非常接近。
对于我们的应用程序,答案越长,所需的更改非常琐碎,基本用法不会改变,并且堆栈损坏问题似乎已经消失。它似乎也与其他较旧的标题很好地交互,例如uthash。
我找到的唯一界面更改是_UNUSED_
宏,用于将gcc警告更改为UTARRAY_UNUSED
。其他一切似乎都是错误修复。
编辑:我并不天真,甚至不能确信1.9.6有一个导致我们的堆栈损坏的问题,但是在调试器中仔细踩过相同的10行代码后,我并没有完全忽略这种可能性大约2个小时,看着每个变量都是正确的。