我特别担心UTARRAY版本2.0.2 vs. 1.9.6。(最近的版权分别是2017年和2012年(。
我需要将uthash.h添加到使用utarray.h的现有项目中,并且宁愿这两个标头都来自相同的版本/comm。
我应该注意,我并不非常关心编译时间不兼容,例如名称更改等。我主要关注的是运行时间中断。
如果您查看utarray.h,您会发现它的所有定义都是宏,一些静态函数和一些typedefs;没有公共符号,因此所有内容都应仅限于当前的汇编单元。
换句话说,是的,只要您不在同一文件中包含两个标头(这可能会导致编译时间错误(或将其暴露在公共API中,您就应该安全。
也就是说,标题中问题的答案是"否";API向后兼容的不兼容变化。但是,有了您在体内提到的限制,您应该可以。
围绕UTARRARY使用的罕见但100%可重复的堆栈腐败问题,使我尝试升级utarray.h,但在我公司的全面进行。
简短的答案是否定的,它不是100%向后兼容。但这很近。
较长的答案是针对我们的应用程序,所需的更改是极其微不足道的,基本用法不会改变,并且堆栈腐败问题似乎已经消失。它似乎也与其他较旧的标头(例如uthash(互动。
我发现的唯一接口更改是用于Hushing GCC警告更改为UTARRAY_UNUSED
的_UNUSED_
宏。其他一切似乎都是错误修复。
编辑:我还不够天真,甚至不远视1.9.6遇到了造成我们堆栈腐败的问题,但是在仔细踏上了调试器中相同的10行代码后,我并没有完全忽略这种可能性大约2个小时,观看每个变量是正确的。