coder.nullcopy
在生成的代码中声明未初始化的变量
说明
您可以使用 coder.nullcopy 通过声明未初始化的变量来优化生成的代码,而无需复制变量值。仅在两种特定情况下使用 coder.nullcopy:
在代码生成时,您看到以下错误之一:
For code generation, all variables must be fully defined before use.(要进行代码生成,所有变量在使用前都必须完全定义。)For code generation, all cell array elements must be fully defined before use.(对于代码生成,所有元胞数组元素在使用前必须完全定义。)但是,您已完全定义所有执行路径中的所有变量和元胞数组元素,并且已考虑并拒绝其他故障排除解决方案。请参阅解决问题:变量在使用前必须完全定义和解决问题:元胞数组元素在使用前必须完全定义。
您在生成的代码中看到冗余的变量赋值。也就是说,对一个变量进行了赋值,然后在使用该变量前又赋予了不同值。
请慎用 coder.nullcopy。在大多数情况下,即使您的 MATLAB® 代码中不包含 coder.nullcopy 函数,代码生成器也会自动执行与 coder.nullcopy 对应的优化。如果使用 coder.nullcopy 声明一个变量,并且在使用该变量之前没有对其进行完整赋值,则生成的代码的行为可能不可预测。
将 X = coder.nullcopy(A)A 的类型、大小和复/实性复制到 X,但不复制元素值。在生成的代码中,coder.nullcopy 声明一个未初始化的变量,从而为 X 预分配内存,而不会产生初始化内存的开销。在 MATLAB 执行中,coder.nullcopy 返回输入值。
在大多数情况下,coder.nullcopy 以递归方式应用。也就是说,如果 A 是聚合类型(类、结构体或元胞数组),coder.nullcopy 还会为 A 的字段、属性或元素预分配内存。但是,如果 A 是包含一个或多个可变大小数组的聚合类型,则需要考虑一些特殊事项。请参阅在类、结构体或元胞数组中声明可变大小数组。
在使用或返回 X 之前,必须为其所有元素赋值。否则,生成的代码的行为可能不可预测。
示例
输入参数
限制
您无法对稀疏矩阵使用
coder.nullcopy。您无法将
coder.nullcopy用于支持重载括号或需要索引方法来访问其数据的类,如table。
扩展功能
版本历史记录
在 R2011a 中推出

