Erlang R15B添加了ErlDrvSSizeT
typedef,R16B添加了erl_drv_output_term
函数,并弃用了旧的等价物。有没有办法用预处理器宏测试这些差异,以便支持具有相同代码的旧Erlang版本?
答案 0 :(得分: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 / OTP版本17.3和Erlang运行时系统版本6.2(erts)是最新的。对于erts 6.2,ERL_DRV_EXTENDED_MAJOR_VERSION
和ERL_DRV_EXTENDED_MINOR_VERSION
分别具有值3和1。 this Erlang/OTP commit中的更改创建了这些版本值。