uthash 和 utarray 向后兼容吗?
Are uthash and utarray backward compatible?
我特别关注 utarray 版本 2.0.2 与 1.9.6。 (最近的版权分别是2017年和2012年)。
我需要将 uthash.h 添加到使用 utarray.h 的现有项目中,并且宁愿这两个 headers 来自同一个 version/commit,所以我'考虑用新的 utarray.h 替换旧的
我应该指出,我并不十分担心 compile-time 不兼容问题,例如名称更改等。我主要担心的是 run-time 破损。
如果你查看 utarray.h,你会发现它定义的只是宏、一些静态函数和一些 typedef;没有 public 符号,所以一切都应该限制在当前编译单元中。
换句话说,是的,只要您不在同一个文件中包含两个 headers(这可能会导致 compile-time 错误)或在您的 [=23] 中公开它=] API 你应该是安全的。
也就是说,您标题中问题的答案是"no"; API 中的不兼容更改破坏了向后兼容性。但是根据您在 body 中提到的限制,您应该没问题。
关于 utarray 的一个罕见但 100% 可重现的堆栈损坏问题导致我尝试升级,只是 utarray.h,但在我公司全面升级。
简短的回答是否定的,它不是 100% 向后兼容的。不过已经很近了。
较长的答案适用于我们的应用程序,所需的更改非常微不足道,基本用法没有改变,堆栈损坏问题似乎已经消失。它似乎也与其他较旧的 headers 交互良好,例如 uthash。
我发现的唯一界面更改是将用于隐藏 gcc 警告的 _UNUSED_
宏更改为 UTARRAY_UNUSED
。其他一切似乎都是错误修复。
编辑:我还不够天真,无法确信 1.9.6 存在导致堆栈损坏的问题,但在仔细检查了 1.9.6 中的相同 10 行代码后,我并没有完全排除这种可能性调试器大约 2 小时,观察每个变量是否正确。
我特别关注 utarray 版本 2.0.2 与 1.9.6。 (最近的版权分别是2017年和2012年)。
我需要将 uthash.h 添加到使用 utarray.h 的现有项目中,并且宁愿这两个 headers 来自同一个 version/commit,所以我'考虑用新的 utarray.h 替换旧的
我应该指出,我并不十分担心 compile-time 不兼容问题,例如名称更改等。我主要担心的是 run-time 破损。
如果你查看 utarray.h,你会发现它定义的只是宏、一些静态函数和一些 typedef;没有 public 符号,所以一切都应该限制在当前编译单元中。
换句话说,是的,只要您不在同一个文件中包含两个 headers(这可能会导致 compile-time 错误)或在您的 [=23] 中公开它=] API 你应该是安全的。
也就是说,您标题中问题的答案是"no"; API 中的不兼容更改破坏了向后兼容性。但是根据您在 body 中提到的限制,您应该没问题。
关于 utarray 的一个罕见但 100% 可重现的堆栈损坏问题导致我尝试升级,只是 utarray.h,但在我公司全面升级。
简短的回答是否定的,它不是 100% 向后兼容的。不过已经很近了。
较长的答案适用于我们的应用程序,所需的更改非常微不足道,基本用法没有改变,堆栈损坏问题似乎已经消失。它似乎也与其他较旧的 headers 交互良好,例如 uthash。
我发现的唯一界面更改是将用于隐藏 gcc 警告的 _UNUSED_
宏更改为 UTARRAY_UNUSED
。其他一切似乎都是错误修复。
编辑:我还不够天真,无法确信 1.9.6 存在导致堆栈损坏的问题,但在仔细检查了 1.9.6 中的相同 10 行代码后,我并没有完全排除这种可能性调试器大约 2 小时,观察每个变量是否正确。