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

是否有宏可用于在驱动程序C代码中测试Erlang版本?,erlang,erlang-driver,Erlang,Erlang Driver,Erlang R15B添加了erldrvsizettypedef,R16B添加了erl_drv_输出_term函数,并弃用了旧的等效函数。有没有办法用预处理器宏测试这些差异,以支持使用相同代码的旧Erlang版本?您可以使用ERL\u driver.h中提供的ERL\u DRV\u EXTENDED\u MAJOR\u版本和ERL\u DRV\u EXTENDED\u MINOR\u版本宏值来决定功能。每当驱动程序API更改时,这些值都会适当增加。这些增量始终在Erlang/OTP发行说明中解释

Erlang R15B添加了
erldrvsizet
typedef,R16B添加了
erl_drv_输出_term
函数,并弃用了旧的等效函数。有没有办法用预处理器宏测试这些差异,以支持使用相同代码的旧Erlang版本?

您可以使用
ERL\u driver.h
中提供的
ERL\u DRV\u EXTENDED\u MAJOR\u版本
ERL\u DRV\u EXTENDED\u MINOR\u版本
宏值来决定功能。每当驱动程序API更改时,这些值都会适当增加。这些增量始终在Erlang/OTP发行说明中解释

例如,Erlang/OTP R15B将一些API函数参数类型从
int
更改为新类型
ErlDrvSizeT
,以更好地处理64位平台。您可以使用以下代码对此进行测试,并对旧版R15B之前的版本进行补偿:

#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
typedef int ErlDrvSizeT;
#endif
#如果ERL\u DRV\u扩展\u主要\u版本<2
typedef int ErlDrvSizeT;
#恩迪夫
此类型定义允许您使用类型
ErlDrvSizeT
,即使对于较旧的驱动程序版本也是如此

在撰写本文时,Erlang运行时系统(erts)的Erlang/OTP版本17.3和6.2是最新版本。对于erts 6.2,
ERL_DRV_EXTENDED_MAJOR_版本
ERL_DRV_EXTENDED_MINOR_版本
的值分别为3和1。中的更改创建了这些版本值