主要内容

生成的代码参数块,验证输入和输出参数

您可以生成代码参数块,在MATLAB执行输入和输出参数验证®函数。使用参数验证,您可以限制类,大小,和其他方面的函数的输入和输出值在不编写代码的主体功能来执行这些测试。看到函数参数验证

金宝app支持的功能

代码生成支持大多数的特性金宝app参数块,包括大小和类验证,验证功能和默认值。代码生成还支持金宝appnamedargs2cell函数。

代码生成不支持这些功能金宝app参数块:

  • 尺寸验证类验证,验证功能重复参数

  • 多个重复的输入参数

  • 在入口点函数名称输入参数

  • 从阶级属性名称输入参数使用structName。类名语法

  • 尺寸确认,时间表,或dlarray(深度学习工具箱)对象。

名称必须是编译时常量

假设喷火是一个函数,使用名称-值参数验证。当你打电话喷火从另一个函数酒吧,代码生成器必须能够确定你提供的名称喷火在编译时间。

例如,代码生成成功的入口点函数myNamedArg_valid。这个函数包含两个调用函数当地的。对于这两个调用,参数名称“x”在代码生成。

函数[着干活,out2] = myNamedArg_valid (in1, in2)着干活=当地(x = in1);out2 =当地(“x”,in2);结束函数=当地(args)参数args.x结束= args.x;结束
codegenmyNamedArg_validarg游戏{0}
代码生成成功。

相比之下,入口点函数的代码生成失败myNamedArg_invalid因为函数的参数名称当地的在运行时提供。

函数= myNamedArg_invalid(价值,inputName) =当地(inputName、价值);结束函数=当地(args)参数args.x结束= args.x;结束
codegenmyNamedArg_invalidarg游戏{0,coder.typeof (a)}
错误调用“myNamedArg_invalid /当地”。这个调用将更多的输入传递给这个函数可以接受。这可能是由于:这个论点不是常数,因此不匹配对myNamedArg_invalid /当地的内部名称参数在代码生成。代码生成可能会失败或产生结果,不同意MATLAB如果一个名称通过调用站点在代码生成是未知的。错误= = > myNamedArg_invalid线:2列:17代码生成失败:错误报告

在某些情况下,代码生成器指定的名称传递给一个可选的位置或重复输入参数。在这种情况下,代码生成成功一个警告和生成的代码可能产生的结果不同于MATLAB执行。看到在运行时通过输入参数名称(MATLAB编码器)

使用包含名称-值的结构参数

假设你的MATLAB函数的命名你打算使用生成代码结构NameValueArgs定义两个名称-值参数,Name1Name2:

函数结果= myFunction (NameValueArgs)参数NameValueArgs.Name1NameValueArgs.Name2结束结束

在体内的功能,直接使用字段结构NameValueArgs.Name1NameValueArgs.Name2读或写数据。

不使用整个结构变量NameValueArgs本身(没有点语法),除了在这些情况下:

  • 使用isfield函数检查调用者提供了一个值在一定名称的论点。例如,提供一个默认值NameValueArgs.Name2外的参数块,你可以使用这个代码片段:

    如果~ isfield (NameValueArgs“Name2”)NameValueArgs。Name2= defaultValue;结束
  • 使用namedargs2cell函数名称参数转发给另一个函数。例如:

    argsCell = namedargs2cell (NameValueArgs);foo (argsCell {:});

任何使用的整个结构变量NameValueArgs(包括上述两种特殊情况)不支持内部循环,匿名函数,或嵌套函数。金宝app

生成的代码和之间的区别MATLAB代码

某些不寻常的代码模式可能导致代码生成的参数验证不同于MATLAB。了解这些差异,看到这些链接:

输入类型规范和参数

使用函数参数验证(参数块)来指定输入不支持类型的入口点函数。金宝app即使你的入口点函数包含参数块验证输入参数,您必须指定这些输入参数使用的属性中列出的三种方法之一方法定义属性的主要输入(MATLAB编码器)

在生成的代码入口点函数的默认值输入

参数块允许您指定一个或多个位置输入参数的默认值。指定一个默认值的参数声明使一个位置参数可选因为MATLAB可以使用默认值,当你不通过函数调用中的值。当你通过使用生成代码codegen(MATLAB编码器)通过使用命令或加速定点代码fiaccel命令,您可以选择不指定属性的一个或多个可选的位置参数恒定的默认值。在这种情况下,这些可选参数的默认值是硬编码在生成的代码中,这些参数没有出现在生成的代码接口。有关示例,请参见下表。

MATLAB代码

生成的代码

函数= useDefaults_1 (a, b, c)参数一个(1,1)的两倍b = 3(1,1)的两倍c = 5(1,1)的两倍= 7结束= a + b + c;结束

codegen命令:

codegen配置:自由- cuseDefaults_1arg游戏{}报告

生成的代码:

双useDefaults_1 (void){返回15.0;}

函数= useDefaults_2 (a, b, c)参数一个(1,1)的两倍b(1,1)的两倍c = 5(1,1)的两倍= 7结束= a + b + c;结束

codegen命令:

codegen配置:自由- cuseDefaults_2arg游戏0报告

生成的代码:

双useDefaults_2 (aa){返回(+ 5.0)+ 7.0;}

codegen命令:

codegen配置:自由- cuseDefaults_2arg游戏{0}报告

生成的代码:

双useDefaults_2(双,双b){返回(a + b) + 7.0;}

另请参阅

相关的话题