主要内容

coder.inlineCall

在生成的代码中内联被调函数

自 R2024a 起

    说明

    out = coder.inlineCall(functionCall) 计算 functionCall 并在生成的代码中内联被调函数。functionCall 可以接受一个或多个输入参量,并且可以返回单个输出。在您的 MATLAB® 代码中使用 coder.inlineCall,以在生成的代码中将函数调用替换为被调函数的函数体。

    内联消除了函数调用的开销,并为进一步优化生成的 C/C++ 代码提供了机会。但是,内联可能生成更庞大、更复杂的 C/C++ 代码。coder.inlineCall 函数覆盖被调函数中的 coder.inline (MATLAB Coder) 指令。

    coder.inlineCall 函数不支持以下各项的内联:

    • 递归函数

    • 包含 parfor 循环的函数

    • parfor 循环中调用的函数

    示例

    [out1,...,outN] = coder.inlineCall(handle,arg1,...,argN) 使用句柄 handle 调用函数(此函数可以有一个或多个输入参量)并在生成的代码中内联此函数。指定的函数可以有多个输出。

    示例

    示例

    全部折叠

    创建局部函数 local_NoInline,该函数返回输入值的平方并包含指令 coder.inline("never")。创建入口函数 useInlineCall,该函数使用 coder.inlineCall 调用 local_NoInline 来覆盖 coder.inline("never") 指令。

    type useInlineCall.m
    function x = useInlineCall(n) %#codegen
    arguments
        n (1,1) double
    end
    x = coder.inlineCall(local_NoInline(n));
    end
    
    function y = local_NoInline(x)
    coder.inline("never");
    y = x^2;
    end
    

    useInlineCall 生成 C 代码,并检查生成代码中的入口函数。代码生成器内联 local_NoInline,从而用函数体替换函数调用。

    codegen -config:lib useInlineCall
    Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because
    Embedded Coder is not installed, this might cause some Embedded Coder features
    to fail.
    
    
    Code generation successful (with warnings): View report
    
    type(fullfile("codegen","lib","useInlineCall","useInlineCall.c"))
    /*
     * File: useInlineCall.c
     *
     * MATLAB Coder version            : 25.2
     * C/C++ source code generated on  : 09-Aug-2025 12:55:25
     */
    
    /* Include Files */
    #include "useInlineCall.h"
    
    /* Function Definitions */
    /*
     * Arguments    : double n
     * Return Type  : double
     */
    double useInlineCall(double n)
    {
      return n * n;
    }
    
    /*
     * File trailer for useInlineCall.c
     *
     * [EOF]
     */
    

    创建局部函数 circleMath,该函数以圆的半径作为输入并返回两个输出:圆的面积和周长。创建入口函数 multiOutputInlineCall,该函数使用 coder.inlineCall 调用 circleMath 的函数句柄,并指示代码生成器内联此函数。

    type multiOutputInlineCall.m
    function [area, circ] = multiOutputInlineCall(radius) %#codegen
    arguments
        radius (1,1) double
    end
    [area, circ] = coder.inlineCall(@circleMath,radius);
    end
    
    function [a,c] = circleMath(r)
    coder.inline("never");
    a = pi*r^2;
    c = pi*2*r;
    end
    

    multiOutputInlineCall 生成 C 代码,并检查生成代码中的入口函数。代码生成器覆盖 coder.inline("never") 指令并在生成的代码中内联 circleMath,从而用函数体替换函数调用。

    codegen -config:lib multiOutputInlineCall
    Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because
    Embedded Coder is not installed, this might cause some Embedded Coder features
    to fail.
    
    
    Code generation successful (with warnings): View report
    
    type(fullfile("codegen","lib","multiOutputInlineCall","multiOutputInlineCall.c"))
    /*
     * File: multiOutputInlineCall.c
     *
     * MATLAB Coder version            : 25.2
     * C/C++ source code generated on  : 09-Aug-2025 12:55:29
     */
    
    /* Include Files */
    #include "multiOutputInlineCall.h"
    
    /* Function Definitions */
    /*
     * Arguments    : double radius
     *                double *area
     *                double *circ
     * Return Type  : void
     */
    void multiOutputInlineCall(double radius, double *area, double *circ)
    {
      *area = 3.1415926535897931 * (radius * radius);
      *circ = 6.2831853071795862 * radius;
    }
    
    /*
     * File trailer for multiOutputInlineCall.c
     *
     * [EOF]
     */
    

    输入参数

    全部折叠

    要计算且在生成的代码中内联的函数调用,指定为函数名称,可后跟以逗号分隔的由一个或多个参量组成的列表(在括号中)。指定的函数最多可以返回一个输出参量。

    示例: coder.inlineCall(myFunction(10,"myString"))

    示例: out = coder.inlineCall(myFunction)

    MathWorks® 函数或用户编写的函数的句柄。此函数可以有多个输出。

    示例: [out1,out2] = coder.inlineCall(@myFunction)

    数据类型: function handle

    具有句柄 handle 的函数的输入,指定为以逗号分隔的函数参量列表。输入的类型取决于被调函数。

    示例: out = coder.inlineCall(@myFunction,10,"myString")

    扩展功能

    全部展开

    C/C++ 代码生成
    使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

    GPU 代码生成
    使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

    版本历史记录

    在 R2024a 中推出