主要内容

函数定义

为代码生成定义和调用函数

在创建用于代码生成的 MATLAB® 函数时,有一些特殊的注意事项。例如,使用 vararginvarargout、递归函数、匿名函数和嵌套函数时,存在某些限制。为了生成 MATLAB 递归函数的代码,代码生成器使用编译时递归或运行时递归。为了生成高效的 C/C++ 代码,代码生成器有时会创建一个函数的多个版本,称为函数特化。在某些情况下,您可以通过使用 coder.ignoreSizecoder.ignoreConst 来阻止代码生成器创建函数特化。生成 MEX 函数时,您可以绕过 MATLAB 代码中特定函数的代码生成,改用 MATLAB 引擎来执行调用。为此,请使用 coder.extrinsic 构造。

函数

coder.extrinsic将函数声明为外部函数,并在 MATLAB 中执行它
coder.ignoreConst防止将表达式的常量值用于函数特化
coder.ignoreSizePrevent code generator from creating function specializations for constant-size expressions
coder.mustBeComplexValidate that value lies on the complex plane (自 R2023b 起)
coder.mustBeConst验证值为编译时常量 (自 R2023b 起)
coder.noImplicitExpansionInFunctionDisable implicit expansion within the specified function in the generated code (自 R2021b 起)
coder.sameSizeBinaryOpApply element-wise binary operations without implicit expansion (自 R2021b 起)
coder.specifyAsGPUSpecify that value is a GPU input to an entry-point function for GPU code generation (自 R2023b 起)

主题

疑难解答

for 循环中 varargin 或 varargout 的非常量索引

当代码生成器无法确定 vararginvarargout 中的索引值时,强制循环展开。

Avoid Duplicate Functions in Generated Code

Reduce the occurrence of duplicate functions in the generated code.

输出变量必须在运行时递归调用之前赋值

对运行时递归的输出变量赋值进行故障排除。

Compile-Time Recursion Limit Reached

Troubleshoot compile-time recursion limit error.

解决错误:数组大小不兼容

对代码生成过程中出现的大小不兼容性错误进行故障排除。

Resolve Issue: coder.inline("never") and coder.nonInlineCall Do Not Prevent Function Inlining

Troubleshoot instances of coder.inline('never') not preventing inlining.

解决问题:变量在使用前必须完全定义

如果变量(包括结构体字段和类属性)在使用前未定义,则需要对代码生成错误进行故障排除。

Resolve Error: Cannot Determine the Exact Number of Iterations for a Loop

Troubleshoot error when code generator is unable to correctly determine number of loop iterations.