代码之家  ›  专栏  ›  技术社区  ›  zzxyz

uthash和utarray是否向后兼容?

  •  1
  • zzxyz  · 技术社区  · 7 年前

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

    我需要添加uthash。h到使用utarray的现有项目。h、 我希望这两个头都来自同一个版本/提交,所以我正在考虑替换旧的utarray。h和较新的。

    我应该指出,我并不十分关心编译时的不兼容性,例如名称更改等。我主要关心的是运行时中断。

    2 回复  |  直到 7 年前
        1
  •  1
  •   nemequ    7 年前

    如果你看 utarray.h ,您将看到它定义的所有内容都是宏、一些静态函数和一些typedef;没有公共符号,因此所有内容都应限于当前的编译单元。

    换句话说,是的,只要不在同一个文件中同时包含两个头(这可能会导致编译时错误)或在公共API中公开它,就应该是安全的。

    也就是说,你标题中的问题的答案是“否”;API中的不兼容更改会破坏向后兼容性。但是有了你在身体里提到的限制,你应该会没事的。

        2
  •  0
  •   zzxyz    6 年前

    围绕utarray的使用,出现了一个罕见但100%可复制的堆栈损坏问题,导致我尝试升级utarray。h、 但在我的公司里,一切都很顺利。

    简而言之,答案是否定的,它不是100%向后兼容的。但距离很近。

    答案越长,对于我们的应用程序,所需的更改是 极其 琐碎的基本用法没有改变,堆栈损坏问题似乎已经消失。它似乎还与其他较旧的头文件(如uthash)进行了良好的交互。

    我发现唯一的界面更改是 _UNUSED_ 用于关闭gcc警告的宏更改为 UTARRAY_UNUSED . 其他一切似乎都是bug修复。

    编辑:我还没有天真到可以相信1.9.6中有一个导致堆栈损坏的问题,但我并没有完全排除这种可能性,因为我在调试器中仔细检查了大约2个小时的相同的10行代码,并观察每个变量都是正确的。