Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

函数定义

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

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

函数

coder.extrinsicDeclare extrinsic functions
coder.ignoreConstPrevent use of constant value of expression for function specializations
coder.ignoreSizePrevent code generator from creating function specializations for constant-size expressions

主题

Compilation Directive %#codegen

Indicate that a MATLAB function is intended for code generation.

Code Generation for Variable Length Argument Lists

Generate code for varargin and varargout.

Code Generation for Recursive Functions

Use recursive functions in MATLAB code that is intended for code generation.

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.

Code Generation for Anonymous Functions

Use anonymous functions in MATLAB code intended for code generation.

Code Generation for Nested Functions

Use nested functions in MATLAB code intended for code generation.

代码生成的函数调用解析

代码生成器使用优先级规则来解析函数调用。

Resolution of File Types on Code Generation Path

The code generator uses precedence rules to resolve file types.

Extrinsic Functions

Declare a function as extrinsic when code generation does not support that function.

疑难解答

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.