是否有可用于在驱动程序C代码中测试Erlang版本的宏?

时间:2014-10-10 06:26:59

标签: erlang erlang-driver

Erlang R15B添加了ErlDrvSSizeT typedef,R16B添加了erl_drv_output_term函数,并弃用了旧的等价物。有没有办法用预处理器宏测试这些差异,以便支持具有相同代码的旧Erlang版本?

1 个答案:

答案 0 :(得分:2)

您可以使用ERL_DRV_EXTENDED_MAJOR_VERSION中提供的ERL_DRV_EXTENDED_MINOR_VERSIONerl_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 / OTP版本17.3和Erlang运行时系统版本6.2(erts)是最新的。对于erts 6.2,ERL_DRV_EXTENDED_MAJOR_VERSIONERL_DRV_EXTENDED_MINOR_VERSION分别具有值3和1。 this Erlang/OTP commit中的更改创建了这些版本值。