主要内容gydF4y2Ba

使用生成的初始化和终止函数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

    • 在代码配置对象中,设置gydF4y2BaCustomInitializergydF4y2Ba到包含自定义代码的字符向量。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.gydF4y2Ba

    codegengydF4y2Ba配置:自由gydF4y2Ba全局变量gydF4y2Ba{' g ', 1}gydF4y2Ba酒吧gydF4y2Ba

    代码生成器生成文件gydF4y2Babar_initialize.cgydF4y2Ba在gydF4y2Ba工作gydF4y2Ba\ codegen \ lib \酒吧gydF4y2Ba,在那里gydF4y2Ba工作gydF4y2Ba包含的文件夹是gydF4y2Babar.mgydF4y2Ba.这个函数gydF4y2Babar_initializegydF4y2Ba初始化全局变量gydF4y2BaggydF4y2Ba.gydF4y2Ba

    Void bar_initialize(Void) {g = 1.0;isInitialized_bar = true;}gydF4y2Ba
    生成的C函数gydF4y2Ba酒吧gydF4y2Ba包括对gydF4y2Babar_initializedgydF4y2Ba.它使用布尔值gydF4y2BaisInitialized_bargydF4y2Ba确保initialize函数只被自动调用一次。gydF4y2Ba

    double 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.gydF4y2Ba

    codegengydF4y2Ba配置:自由gydF4y2Ba喷火gydF4y2Baarg游戏gydF4y2Ba{1}gydF4y2Ba

    代码生成器生成文件gydF4y2Bafoo_initialize.cgydF4y2Ba在gydF4y2Ba工作gydF4y2Ba\ codegen \ lib \ foogydF4y2Ba,在那里gydF4y2Ba工作gydF4y2Ba包含的文件夹是gydF4y2Bafoo.mgydF4y2Ba.这个函数gydF4y2Bafoo_initializegydF4y2Ba调用非有限数金宝app据的支持代码,gydF4y2Bart_InitInfAndNaNgydF4y2Ba,在另一个生成的文件中定义gydF4y2Bart_nonfinite.cgydF4y2Ba.gydF4y2Ba

    void foo_initialize(void) {rt_InitInfAndNaN();isInitialized_foo = true;}gydF4y2Ba

终止函数gydF4y2Ba

生成的终止函数的名称为gydF4y2Baprimary_function_namegydF4y2Ba_terminategydF4y2Ba,在那里gydF4y2Baprimary_function_namegydF4y2Ba是生成代码时指定的第一个MATLAB入口点函数的名称。terminate函数释放分配的内存并执行其他清理操作。gydF4y2Ba

terminate函数还可以包括您指定的自定义清理代码。要在terminate函数中包含自定义代码,请执行以下操作之一:gydF4y2Ba

  • 在代码配置对象中,设置gydF4y2BaCustomTerminatorgydF4y2Ba到包含自定义代码的字符向量。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\ codegen \ lib \酒吧gydF4y2Ba,在那里gydF4y2Ba工作gydF4y2Ba包含的文件夹是gydF4y2Babar.mgydF4y2Ba.这个函数gydF4y2Babar_terminategydF4y2Ba设置布尔值gydF4y2BaisInitialized_bargydF4y2Ba(设置为gydF4y2Ba真正的gydF4y2Ba初始化函数调用后)到gydF4y2Ba假gydF4y2Ba.gydF4y2Ba

void bar_terminate(void) {isInitialized_bar = false;}gydF4y2Ba

另请参阅gydF4y2Ba

|gydF4y2Ba|gydF4y2Ba

相关的话题gydF4y2Ba