函数定义
在创建用于代码生成的 MATLAB® 函数时,有一些特殊的注意事项。例如,使用 varargin
和 varargout
、递归函数、匿名函数和嵌套函数时,存在某些限制。为了生成 MATLAB 递归函数的代码,代码生成器使用编译时递归或运行时递归。为了生成高效的 C/C++ 代码,代码生成器有时会创建一个函数的多个版本,称为函数特化。在某些情况下,您可以通过使用 coder.ignoreConst
和 coder.ignoreSize
来阻止代码生成器创建函数特化。生成 MEX 函数时,您可以绕过 MATLAB 代码中特定函数的代码生成,改用 MATLAB 引擎来执行调用。为此,请使用 coder.extrinsic
构造。
函数
coder.extrinsic | 将函数声明为外部函数,并在 MATLAB 中执行它 |
coder.ignoreConst | Prevent use of constant value of expression for function specializations |
coder.ignoreSize | Prevent code generator from creating function specializations for constant-size expressions |
coder.mustBeComplex | Validate that value lies on the complex plane (自 R2023b 起) |
coder.mustBeConst | Validate that value is a compile-time constant (自 R2023b 起) |
coder.noImplicitExpansionInFunction | Disable implicit expansion within the specified function in the generated code (自 R2021b 起) |
coder.sameSizeBinaryOp | Apply element-wise binary operations without implicit expansion (自 R2021b 起) |
coder.specifyAsGPU | Specify that value is a GPU input to an entry-point function for GPU code generation (自 R2023b 起) |
主题
- 编译指令 %#codegen
指示 MATLAB 函数用于代码生成。
- Generate Code With Implicit Expansion Enabled
The code generator introduces modifications in the generated code to accomplish implicit expansion.
- Optimize Implicit Expansion in Generated Code
Implicit expansion in the generated code is enabled by default.
- Code Generation for Variable Length Argument Lists
Generate code for
varargin
andvarargout
. - Generate Code for arguments Block That Validates Input and Output Arguments
Generate code for MATLAB code that constrains class, size, and other aspects of function input and output values.
- 递归函数的代码生成
在用于代码生成的 MATLAB 代码中使用递归函数。
- Force Code Generator to Use Run-Time Recursion
Rewrite your MATLAB code so that the code generator uses run-time recursion instead of compile-time recursion.
- 匿名函数的代码生成
在用于代码生成的 MATLAB 代码中使用匿名函数。
- Code Generation for Nested Functions
Use nested functions in MATLAB code intended for code generation.
- 代码生成的函数调用解析
代码生成器使用优先级规则来解析函数调用。
- 代码生成路径中文件类型的解析
代码生成器使用优先级规则来解析文件类型。
- 使用 MATLAB 引擎在生成的代码中执行函数调用
如果代码生成不支持某个函数,请将其声明为外部函数以在 MATLAB 中执行。
疑难解答
Nonconstant Index into varargin or varargout in a for-Loop
Force loop unrolling when the code generator cannot
determine the value of the index into varargin
or varargout
.
Avoid Duplicate Functions in Generated Code
Reduce the occurrence of duplicate functions in the generated code.
Output Variable Must Be Assigned Before Run-Time Recursive Call
Troubleshoot output variable assignment for run-time recursion.
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 Issue: Variables Must Be Fully Defined Before Use
Troubleshoot code generation errors when variables, including structure fields and class properties, are not defined before use.