uthash和utarray向后兼容吗?

时间:2018-02-08 20:49:17

标签: c uthash

我特别关注utarray版本2.0.2与1.9.6。 (最新版权分别为2017年和2012年)。

我需要将uthash.h添加到使用utarray.h的现有项目中,并且宁愿这两个标题来自相同的版本/提交,所以我考虑用更换旧的utarray.h较新的。

我应该注意到我并不十分关注编译时不兼容性,例如名称更改等。我主要担心的是运行时断裂。

2 个答案:

答案 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个小时,看着每个变量都是正确的。