是否有宏可用于在驱动程序C代码中测试Erlang版本?
Erlang R15B添加了是否有宏可用于在驱动程序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发行说明中解释
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。中的更改创建了这些版本值