主要内容

指定入口函数输入的类型

由于 C 和 C++ 是静态类型语言,因此代码生成器必须在代码生成过程中确定生成代码中所有变量的类和大小。要生成具有特定变量类型的 C/C++ 代码,您必须指定入口函数所有输入的类型。输入类型设定是代码生成工作流中的关键步骤。

如果入口函数没有输入,可以跳过此步骤。您不需要指定非入口函数的输入的类和大小。

输入类型设定的方法

您必须指定入口函数的所有输入的类和大小。对于聚合类型,如类、结构体和元胞数组,还必须分别指定每个属性、字段和元素的类和大小。您可以通过多种方法指定输入类型:在 MATLAB® Coder™ 中指定,在命令行中使用带有 -args 选项的 codegen 命令指定,在 MATLAB 入口函数中使用函数参量验证(arguments 块)指定,或在 MATLAB 代码中使用预条件(assert 语句)指定。下表概述每种方法的优缺点。

方法优点缺点

Define Types of Entry-Point Inputs by Using the MATLAB Coder App

  • 易于使用,甚至在指定聚合数据类型(如元胞或结构体)时也可以使用

  • 不会改变原始 MATLAB 代码

  • 代码生成器将类型定义保存在工程文件中

  • 输入类型不在 MATLAB 代码中记录

Specify Input Types at the Command Line

  • 适用于具有少量输入项的原型构建函数

  • 易于用于固定大小、非聚合输入或可通过示例指定的输入

  • 不会改变原始 MATLAB 代码

  • 除非使用脚本,否则每次生成代码时都必须指定输入

  • 可变大小或聚合输入的语法可能相当复杂

Use Function Argument Validation to Specify Entry-Point Input Types

  • 允许您在专用代码块中指定代码生成所需的参量方面

  • 与使用 assert 语句的输入类型设定相比,生成的 MATLAB 代码更清晰、更简洁

  • 简化代码生成,因为每次在 MATLAB Coder 或命令行中生成代码时,无需指定输入类型

  • 在 MATLAB 入口函数中公开参量设定

Specify Input Types Using assert Statements in MATLAB Code

  • 简化代码生成,因为每次在 MATLAB Coder 或命令行中生成代码时,无需指定输入类型

  • 在您的 MATLAB 代码中公开参量设定。

  • 使用复杂的语法

  • 由于 assert 语句可以出现在 MATLAB 代码中的任何位置,因此很难诊断在代码生成期间或运行时出现的与输入类型设定相关的问题

未使用的输入

如果一个或多个入口函数有未使用的输入变量,代码生成需要考虑某些因素,这些因素取决于您使用的输入类型设定的方法。

  • 如果通过使用带有 -args 选项的 codegen 函数来指定输入类型,则不必指定未使用的输入变量。但是,在函数声明中,所有使用的变量必须出现在所有未使用的变量之前。未使用和未指定的变量不会出现在生成的代码中。

  • 如果 MATLAB 入口函数的所有输入都未使用,并且您使用带有 -args 选项的 codegen 函数指定输入类型,则您可以通过将空元胞数组 {} 传递给 -args 来生成不带输入的 C/C++ 函数。

  • 如果您使用 MATLAB Coder 指定输入类型,您必须指定未使用的输入的类型。未使用的输入出现在生成的代码中。

  • 如果使用 arguments 块或 assert 语句在 MATLAB 代码中定义输入类型,则必须指定未使用的输入的类型。您不能使用波浪号字符 (~) 指定未使用的输入。未使用的输入出现在生成的代码中。

提示

  • 要指定作为定点 fi (Fixed-Point Designer) 对象的输入,您必须配置关联的 numerictype (Fixed-Point Designer)fimath (Fixed-Point Designer) 对象。

  • 要从一个入口函数生成一个多签名 MEX 函数,请为该同一入口函数提供多个 -args 设定。生成的 MEX 函数使用您在代码生成过程中提供的多个签名。有关多签名 MEX 函数生成的详细信息,请参阅Generate Code for Functions with Multiple Signatures

  • 如果生成一个可以接受具有给定形状的空数组的 MEX、SIL 或 PIL 函数,则生成的函数也接受其他形状的空数组。MEX、SIL 或 PIL 函数会对空的运行时输入数组进行重构,以匹配在代码生成期间指定的数组的形状。请参阅由于通过 MEX、SIL 和 PIL 函数调整空数组的大小导致与 MATLAB 不兼容

另请参阅

主题