使用生成的初始化和终止函数gydF4y2Ba
当从MATLAB生成C/ c++代码时gydF4y2Ba®gydF4y2Ba代码,代码生成器自动生成两个内务函数,初始化和终止。initialize函数初始化生成的C/ c++入口点函数所操作的状态。它必须在第一次调用入口点函数之前调用。terminate函数释放分配的内存并执行其他清理操作。它必须在最后一次调用入口点函数之后调用。gydF4y2Ba
初始化函数gydF4y2Ba
生成的初始化函数的名称为gydF4y2Baprimary_function_namegydF4y2Ba_initializegydF4y2Ba
,在那里gydF4y2Baprimary_function_namegydF4y2Ba是生成代码时指定的第一个MATLAB入口点函数的名称。initialize函数初始化生成的入口点函数所操作的状态。初始化函数可以包括:gydF4y2Ba
调用非有限数据的支金宝app持代码(gydF4y2Ba
正gydF4y2Ba
而且gydF4y2Ba南gydF4y2Ba
).如果MATLAB代码包含可以生成非有限值的操作,就会生成这些调用。gydF4y2Ba初始化的代码gydF4y2Ba
全球gydF4y2Ba
或gydF4y2Ba持续的gydF4y2Ba
变量。gydF4y2Ba用于创建指定的初始状态的自定义代码。要在初始化函数中包含自定义代码,请执行以下操作之一:gydF4y2Ba
在代码配置对象中,设置gydF4y2Ba
CustomInitializergydF4y2Ba
到包含自定义代码的字符向量。gydF4y2Ba在gydF4y2BaMATLAB编码器™gydF4y2Ba应用,在gydF4y2Ba自定义代码gydF4y2Ba选项卡,为初始化函数指定自定义代码。gydF4y2Ba
在某些情况下,不需要初始化代码,生成的初始化函数为空。gydF4y2Ba
调用初始化函数gydF4y2Ba
如果生成MEX函数,生成的代码将自动包含对初始化函数的调用。如果你生成独立代码,有两种可能的情况:gydF4y2Ba
默认情况下,如果initialize函数非空,代码生成器在生成的C/ c++入口点函数的开头包含对initialize函数的调用。生成的代码还包括检查,以确保initialize函数只被自动调用一次,即使存在多个入口点函数。在这种情况下,您不需要手动调用initialize函数。gydF4y2Ba
如果initialize函数为空,则生成的C/ c++入口点函数不包括对initialize函数的调用。gydF4y2Ba
您可以选择在生成的入口点函数中不包含对initialize函数的调用。做以下其中一件事:gydF4y2Ba
在一个gydF4y2Ba
编码器。CodeConfiggydF4y2Ba
或gydF4y2Ba编码器。EmbeddedCodeConfiggydF4y2Ba
对象,设置gydF4y2BaRunInitializeFcngydF4y2Ba
来gydF4y2Ba假gydF4y2Ba
.gydF4y2Ba在gydF4y2BaMATLAB编码器gydF4y2Ba应用,在gydF4y2Ba所有设置gydF4y2Ba选项卡,设置gydF4y2Ba自动运行initialize函数gydF4y2Ba来gydF4y2Ba
没有gydF4y2Ba
.gydF4y2Ba
如果做出此选择,则必须在第一次调用生成的入口点函数之前手动调用initialize函数。不调用initialize函数会导致生成的入口点函数在无效状态上操作。gydF4y2Ba
如果生成带有类接口的c++代码,那么代码生成器将生成执行初始化和终止操作的类构造函数和析构函数。不需要手动调用gydF4y2Ba初始化gydF4y2Ba
而且gydF4y2Ba终止gydF4y2Ba
功能。看到gydF4y2Ba使用类接口生成c++代码gydF4y2Ba.gydF4y2Ba
生成的初始化函数示例gydF4y2Ba
MATLAB代码模式示例及相应生成的初始化函数:gydF4y2Ba
您的MATLAB代码使用gydF4y2Ba
全球gydF4y2Ba
或gydF4y2Ba持续的gydF4y2Ba
变量。例如,定义这个MATLAB函数:gydF4y2Ba函数gydF4y2BaY = bargydF4y2Ba全球gydF4y2Bay = G;gydF4y2Ba结束gydF4y2Ba
生成的静态库gydF4y2Ba
酒吧gydF4y2Ba
.的初始值gydF4y2BaggydF4y2Ba
作为gydF4y2Ba1gydF4y2Ba
.gydF4y2BacodegengydF4y2Ba配置:自由gydF4y2Ba全局变量gydF4y2Ba{' g ', 1}gydF4y2Ba酒吧gydF4y2Ba
代码生成器生成文件gydF4y2Ba
bar_initialize.cgydF4y2Ba
在gydF4y2Ba
,在那里gydF4y2Ba工作gydF4y2Ba
\ codegen \ lib \酒吧gydF4y2Ba
包含的文件夹是gydF4y2Ba工作gydF4y2Ba
bar.mgydF4y2Ba
.这个函数gydF4y2Babar_initializegydF4y2Ba
初始化全局变量gydF4y2BaggydF4y2Ba
.gydF4y2BaVoid bar_initialize(Void) {g = 1.0;isInitialized_bar = true;}gydF4y2Ba
酒吧gydF4y2Ba
包括对gydF4y2Babar_initializedgydF4y2Ba
.它使用布尔值gydF4y2BaisInitialized_bargydF4y2Ba
确保initialize函数只被自动调用一次。gydF4y2Badouble bar(void) {if (!isInitialized_bar) {bar_initialize();}返回g;}gydF4y2Ba
您的MATLAB代码包含一个可以生成非有限值的操作(gydF4y2Ba
正gydF4y2Ba
或gydF4y2Ba南gydF4y2Ba
).例如,定义一个MATLAB函数gydF4y2Ba喷火gydF4y2Ba
调用gydF4y2Ba的阶乘gydF4y2Ba
.的gydF4y2Ba的阶乘gydF4y2Ba
函数快速增长并返回gydF4y2Ba正gydF4y2Ba
对于大于某个阈值的输入。对于类型的输入gydF4y2Ba双gydF4y2Ba
,阈值为gydF4y2Ba170gydF4y2Ba
.执行gydF4y2Ba阶乘(171)gydF4y2Ba
在MATLAB中返回gydF4y2Ba正gydF4y2Ba
.gydF4y2Ba函数gydF4y2BaY = foo(a) Y =阶乘(a);gydF4y2Ba结束gydF4y2Ba
生成的静态库gydF4y2Ba
喷火gydF4y2Ba
.gydF4y2BacodegengydF4y2Ba配置:自由gydF4y2Ba喷火gydF4y2Baarg游戏gydF4y2Ba{1}gydF4y2Ba
代码生成器生成文件gydF4y2Ba
foo_initialize.cgydF4y2Ba
在gydF4y2Ba
,在那里gydF4y2Ba工作gydF4y2Ba
\ codegen \ lib \ foogydF4y2Ba
包含的文件夹是gydF4y2Ba工作gydF4y2Ba
foo.mgydF4y2Ba
.这个函数gydF4y2Bafoo_initializegydF4y2Ba
调用非有限数金宝app据的支持代码,gydF4y2Bart_InitInfAndNaNgydF4y2Ba
,在另一个生成的文件中定义gydF4y2Bart_nonfinite.cgydF4y2Ba
.gydF4y2Bavoid foo_initialize(void) {rt_InitInfAndNaN();isInitialized_foo = true;}gydF4y2Ba
终止函数gydF4y2Ba
生成的终止函数的名称为gydF4y2Baprimary_function_namegydF4y2Ba_terminategydF4y2Ba
,在那里gydF4y2Baprimary_function_namegydF4y2Ba是生成代码时指定的第一个MATLAB入口点函数的名称。terminate函数释放分配的内存并执行其他清理操作。gydF4y2Ba
terminate函数还可以包括您指定的自定义清理代码。要在terminate函数中包含自定义代码,请执行以下操作之一:gydF4y2Ba
在代码配置对象中,设置gydF4y2Ba
CustomTerminatorgydF4y2Ba
到包含自定义代码的字符向量。gydF4y2Ba另外,在gydF4y2BaMATLAB编码器gydF4y2Ba应用,在gydF4y2Ba自定义代码gydF4y2Ba选项卡,为终止函数指定自定义代码。gydF4y2Ba
如果生成MEX函数,生成的代码将自动包含对terminate函数的调用。gydF4y2Ba
如果生成独立代码,生成的代码不会自动包含对terminate函数的调用。在这种情况下,您必须在最后一次调用生成的入口点函数之后手动调用terminate函数。gydF4y2Ba
终止函数也用于清除持久变量的状态。持久变量保持其状态,直到调用终止函数。有关更多信息,请参见gydF4y2Ba为持久变量生成代码gydF4y2Ba.gydF4y2Ba
生成终止函数示例gydF4y2Ba
定义这个MATLAB函数:gydF4y2Ba
函数gydF4y2BaY = bargydF4y2Ba全球gydF4y2Bay = G;gydF4y2Ba结束gydF4y2Ba
生成的静态库gydF4y2Ba酒吧gydF4y2Ba
.的初始值gydF4y2BaggydF4y2Ba
作为gydF4y2Ba1gydF4y2Ba
.gydF4y2Ba
codegengydF4y2Ba配置:自由gydF4y2Ba全局变量gydF4y2Ba{' g ', 1}gydF4y2Ba酒吧gydF4y2Ba
代码生成器生成文件gydF4y2Babar_terminate.cgydF4y2Ba
在gydF4y2Ba
,在那里gydF4y2Ba工作gydF4y2Ba
\ codegen \ lib \酒吧gydF4y2Ba
包含的文件夹是gydF4y2Ba工作gydF4y2Ba
bar.mgydF4y2Ba
.这个函数gydF4y2Babar_terminategydF4y2Ba
设置布尔值gydF4y2BaisInitialized_bargydF4y2Ba
(设置为gydF4y2Ba真正的gydF4y2Ba
初始化函数调用后)到gydF4y2Ba假gydF4y2Ba
.gydF4y2Ba
void bar_terminate(void) {isInitialized_bar = false;}gydF4y2Ba
另请参阅gydF4y2Ba
编码器。MexCodeConfiggydF4y2Ba
|gydF4y2Ba编码器。CodeConfiggydF4y2Ba
|gydF4y2Ba编码器。EmbeddedCodeConfiggydF4y2Ba