主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

控制 C 代码的样式

关于本教程

学习目标

本教程将向您说明如何:

  • switch-case 语句的形式为 if-elseif-else 决策逻辑生成代码。

  • 使用 MATLAB® Coder™ 从 MATLAB 代码中生成 C 代码。

  • MATLAB Coder 工程中配置代码生成配置参数。

  • 创建代码生成报告,您可以使用该报告在原始 MATLAB 代码和生成的 C 代码之间进行追溯。

需要的产品

本教程需要以下产品:

需要的文件

类型名称描述
函数代码test_code_style.m使用 if-elseif-else 的 MATLAB 示例。

在本地工作文件夹中创建文件

  1. 创建一个本地工作文件夹,例如 c:\ecoder\work

  2. 创建包含以下代码的文件 test_code_style.m

    function y = test_code_style(x) 
    %#codegen
    
    if (x == 1)
        y = 1;
    elseif (x == 2)
        y = 2;
    elseif (x == 3)    
        y = 3;
    else
        y = 4;
    end

打开 MATLAB Coder

在 MATLAB 工具条的 App 选项卡上,点击代码生成下的 MATLAB Coder 图标。该 App 将打开“创建 MATLAB Coder 工程”对话框。

提供工程文件的名称以及要放置该文件的文件夹。对于此示例,在当前工作文件夹中创建一个名为 code_style.coderprj 的文件。

指定源文件

  1. 点击 MATLAB Coder 面板的输入部分中的添加入口函数按钮或工具条中的入口函数按钮。

  2. 入口函数选项卡将打开。输入您的入口函数的名称 test_code_style

  3. 该 App 在入口函数上运行代码生成就绪工具。此工具会筛查 MATLAB 代码中是否存在代码生成不支持的功能和函数。如果 App 发现入口函数或其依赖项之一存在问题,它会在入口函数选项卡中显示一条警告消息。在此示例中,App 未检测到 test_code_style 函数中的代码生成就绪问题。

定义输入类型

由于 C 代码使用静态类型,因此在编译时,代码生成器必须确定 MATLAB 文件中所有变量的属性。因此,您必须指定所有函数输入的属性。要在入口函数选项卡中定义输入 x 的属性:

  1. 展开 test_code_style 节点。

  2. 点击 x 右侧的字段。从选项列表中选择 int16。将大小设定保留为其默认值 1×1。

生成并运行 MEX 函数

MEX 函数是可从 MATLAB 内部调用的生成代码。在生成独立的 C/C++ 代码之前,最佳做法是生成并运行 MEX 函数。此步骤使您能够检测并修复在生成的独立 C/C++ 代码中更难诊断出的运行时错误。默认情况下,MEX 函数包括内存完整性检查。这些检查执行数组边界和维度检查,还检测为 MATLAB 函数生成的代码中是否存在内存完整性冲突问题。有关详细信息,请参阅Control Run-Time Checks

  1. 在工具条的 MATLAB Coder 选项卡的准备部分中,将输出设置为 C,将编译类型设置为 MEX。其他代码配置设置使用默认值。

  2. 在工具条的生成部分中,打开生成代码下拉菜单并选择生成代码并编译选项。

代码生成面板的输出部分指示已成功生成代码。

生成的 MEX 函数 test_code_style_mex 位于您当前的工作文件夹中。在命令行窗口中,使用示例输入运行 MEX 函数。例如:

test_code_style_mex(int16(4));
生成的 MEX 运行时没有错误。

配置代码生成参数

在工具条的 MATLAB Coder 选项卡的准备部分中:

  1. 编译类型设置为静态库 (.lib)

  2. 点击设置并设置以下参数:

    • 代码外观选项卡上,选中将 if-elseif-else 模式转换为 switch-case 语句复选框。

    • 调试选项卡上,确保已选择始终创建报告

    • 高级选项卡上,确保已选择启用代码可追溯性

注意

将 if-elseif-else 模式转换为 switch-case 语句优化仅对整数和枚举类型的输入有效。

生成独立 C 代码

在工具条的生成部分中,打开生成代码下拉菜单并选择生成代码并编译选项。

完成代码生成之后,代码生成器会在 /codegen/lib/test_code_style 子文件夹中生成 C 静态库 test_code_style.lib 和 C 代码。MATLAB Coder 面板的输出部分提供了报告的链接。

查看生成的代码

  1. 要打开代码生成报告,点击代码生成报告链接。

    代码窗格中显示 test_code_style 函数。

  2. 要对照查看 MATLAB 代码和 C 代码,请点击追溯代码

  3. 在 MATLAB 代码中,将光标放在语句 if (x == 1) 上。

    该报告将 if (x == 1) 追溯到 switch 语句。

另请参阅

主题