Erlang R15B 添加了ErlDrvSSizeT
typedef,R16B 添加了erl_drv_output_term
函数并弃用了旧的等效项。有没有办法用预处理器宏测试这些差异,以支持具有相同代码的旧 Erlang 版本?
问问题
121 次
1 回答
2
您可以使用 中提供的ERL_DRV_EXTENDED_MAJOR_VERSION
和ERL_DRV_EXTENDED_MINOR_VERSION
宏值erl_driver.h
来做出有关功能的决策。每当驱动程序 API 更改时,这些值都会适当地递增。这些增量总是在 Erlang/OTP 发行说明中解释。
例如,Erlang/OTP R15B 将一些 API 函数参数类型从int
更改为新类型ErlDrvSizeT
,以更好地应对 64 位平台。您可以使用以下代码对此进行测试并针对较旧的 R15B 之前的版本进行补偿:
#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
typedef int ErlDrvSizeT;
#endif
此 typedef 允许您使用该类型ErlDrvSizeT
,即使是较旧的驱动程序版本。
在撰写本文时,Erlang 运行时系统 (erts) 的 Erlang/OTP 版本 17.3 和版本 6.2 是最新的。对于 erts 6.2,ERL_DRV_EXTENDED_MAJOR_VERSION
分别ERL_DRV_EXTENDED_MINOR_VERSION
具有值 3 和 1。此 Erlang/OTP 提交中的更改创建了这些版本值。
于 2014-10-10T12:27:57.533 回答