确定入口函数并检查 MATLAB 代码
在生成代码之前,您需要识别一个或多个入口函数。然后,使用代码分析器和代码生成就绪工具检查您的 MATLAB® 代码,查找特定于代码生成的常见错误。确定入口函数并检查常见错误是代码生成工作流的第一步。
确定入口函数
入口函数是您要从自定义 C/C++ 代码中直接访问的函数。代码生成器保留识别为入口函数的函数的签名。入口函数是生成代码的稳定接口。对于没有指定为入口函数的函数,代码生成器使用内部启发式方法来平衡代码性能和可读性。这意味着代码生成器可以消除、内联或修改非入口函数调用。没有指定为入口函数的函数不是生成代码的稳定接口。
代码生成器支持几种类型的入口函数,包括:
单个入口函数,单个生成的函数签名 - 对于许多应用程序,入口函数是调用其他 MATLAB 函数的单个顶层函数。当您要通过使用单个函数签名与生成的代码进行对接时,请使用单个入口函数。
单个入口函数、多个函数签名 - 在 MATLAB 中,某些函数可以接受多个不同数据类型作为输入。通过为单个入口函数生成多个签名,您可以在生成的代码中模拟这种灵活性。请参阅Generate Code for Functions with Multiple Signatures。
多个入口函数、多个函数签名 - 为了在您的 MATLAB 代码中为多个函数生成稳定接口,您可以同时为多个入口函数生成代码。请参阅Generate Code for Multiple Entry-Point Functions。
使用代码分析器
为了最大限度地减少代码生成错误,请在生成 C/C++ 代码之前使用 MATLAB 编辑器中的代码分析器。代码分析器在您输入代码时检查您的代码,报告问题,并提出修改建议。
要使用代码分析器来识别特定于代码生成的警告和错误,请将 %#codegen 指令添加到 MATLAB 文件中。有关添加 %#codegen 指令时代码分析器执行的检查的列表,请参阅Performance Improvements。
如果编辑器窗口右上角的指示标记为绿色,则代码分析器未检测到代码生成问题。

如果指示标记为红色,则代码分析器已检测到代码中的错误。如果指示标记为橙色,则表示检测到警告。当指示标记为红色或橙色时,出现问题的代码右侧会显示红色或橙色标记。指向标记以获取有关错误或警告的信息。点击错误消息中带下划线的文本,可查看更详细的说明和建议操作。

在从您的 MATLAB 代码生成代码之前,请修复代码分析器检测到的错误。有关代码分析器的详细信息,请参阅使用代码分析器检查代码中的错误和警告。
使用代码生成就绪工具
代码生成器支持大多数 MATLAB 语言功能和函数。请参阅C/C++ 代码生成支持的函数和对象。要检查代码中是否包含不支持的函数和语言功能,请使用代码生成就绪工具。要运行代码生成就绪工具,请使用以下方法之一:
在 MATLAB Coder™ 中,添加一个入口函数。代码生成就绪工具会自动运行。
在浏览器中,右键点击要检查代码生成就绪的文件,然后选择检查代码生成就绪。
在命令行中,使用
coder.screener函数。
代码生成就绪工具解析您的代码,并尝试识别不支持的 MATLAB 函数和语言功能。最佳做法是在生成代码之前修复该工具列出的问题。有关详细信息,请参阅代码生成就绪工具。
在代码生成之前对错误进行故障排除
代码分析器和代码生成就绪工具无法检测到您的 MATLAB 代码中所有可能的代码生成合规性问题。但是,使用这些工具有助于最大限度地减少故障排除次数,以及减少生成能够工作的、经过优化的和生产就绪的 C/C++ 或 MEX 代码需要完成的代码生成迭代次数。
下表描述代码分析器或代码生成就绪工具可以检测到的一些代码问题,并建议一些可能的解决方案。
| 错误消息 | 问题 | 可能的解决方案 |
|---|---|---|
Code generation does not support scripts.(代码生成不支持脚本。) | 您正在尝试为 MATLAB 脚本生成代码。 | 要进行代码生成,您的 MATLAB 代码必须位于只包含函数定义的函数文件中。 |
This function is not supported in code generation.(代码生成中不支持此函数。) | 代码生成不支持在您的 MATLAB 代码中使用的一个或多个 MathWorks® 函数。 | 如果您的代码包含不支持的函数,请考虑以下解决方法之一:
有关这些解决办法的更多详细信息,请参阅解决错误:代码生成不支持函数。 |
Code generation requires a variable to be fully defined through assignment before subscripting it.(代码生成要求在给变量加下标之前,通过赋值对变量进行完全定义。) | 您正在尝试通过在现有索引边界之外赋值来创建或扩展数组。 | 在 MATLAB 中,您可以通过给未定义的数组元素赋值来创建或增大数组。代码生成不支持这种数组创建和扩展方法。必须先定义矩阵,然后再为矩阵元素赋值。请参阅在对索引变量赋值之前定义矩阵。 |
Code generation only supports growing the size of an array through 'end + 1' indexing.(代码生成仅支持通过 'end + 1' 索引增大数组的大小。) | 您正在尝试以代码生成不支持的方式使用 end 来增大数组。 | 要使用 MATLAB 代码中的
|
Variable might be used before it is defined, this is not allowed in code generation.(可能在定义变量前使用了变量,这在代码生成中是不允许的。) | 您在定义变量之前使用了它。 | 确保所有变量在使用前都已定义。在许多情况下,该错误表示这些代码也不会在 MATLAB 中运行。 |