主要内容

coder.nonInlineCall

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

自 R2024a 起

    说明

    out = coder.nonInlineCall(functionCall) 计算 functionCall 并防止在生成的代码中内联此函数。functionCall 可以接受一个或多个输入参量,并且可以返回单个输出。当您要简化 MATLAB® 源代码和生成代码之间的映射时,请使用 coder.nonInlineCallcoder.nonInlineCall 函数覆盖被调函数中的 coder.inline 指令。

    coder.nonInlineCall 函数不会阻止以下各项的内联:

    • 空函数

    • 返回常量输出的函数

    若要即使在这些情况下也防止内联,请在 MATLAB 代码中的函数调用点对输入使用 coder.ignoreConst 函数。有关详细信息,请参阅Resolve Issue: coder.inline("never") and coder.nonInlineCall Do Not Prevent Function Inlining

    示例

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

    示例

    示例

    全部折叠

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

    type useNonInlineCall.m
    function x = useNonInlineCall(n) %#codegen
    arguments
        n (1,1) double
    end
    x = coder.nonInlineCall(local_Inline(n));
    end
    
    function y = local_Inline(x)
    coder.inline("always");
    y = x^2;
    end
    

    useNonInlineCall 生成 C 代码,并检查生成代码中的入口函数。代码生成器覆盖 coder.inline("always") 指令,从而防止在生成的代码中内联 local_Inline

    codegen -config:lib useNonInlineCall
    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","useNonInlineCall","useNonInlineCall.c"))
    /*
     * File: useNonInlineCall.c
     *
     * MATLAB Coder version            : 25.2
     * C/C++ source code generated on  : 09-Aug-2025 12:55:34
     */
    
    /* Include Files */
    #include "useNonInlineCall.h"
    
    /* Function Declarations */
    static double local_Inline(double x);
    
    /* Function Definitions */
    /*
     * Arguments    : double x
     * Return Type  : double
     */
    static double local_Inline(double x)
    {
      return x * x;
    }
    
    /*
     * Arguments    : double n
     * Return Type  : double
     */
    double useNonInlineCall(double n)
    {
      return local_Inline(n);
    }
    
    /*
     * File trailer for useNonInlineCall.c
     *
     * [EOF]
     */
    

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

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

    multiOutputNonInlineCall 生成 C 代码,并检查生成代码中的入口函数。代码生成器覆盖 coder.inline("always") 指令,并防止在生成的代码中内联 circleMath

    codegen -config:lib multiOutputNonInlineCall
    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","multiOutputNonInlineCall","multiOutputNonInlineCall.c"))
    /*
     * File: multiOutputNonInlineCall.c
     *
     * MATLAB Coder version            : 25.2
     * C/C++ source code generated on  : 09-Aug-2025 12:55:38
     */
    
    /* Include Files */
    #include "multiOutputNonInlineCall.h"
    
    /* Function Declarations */
    static double circleMath(double r, double *c);
    
    /* Function Definitions */
    /*
     * Arguments    : double r
     *                double *c
     * Return Type  : double
     */
    static double circleMath(double r, double *c)
    {
      double a;
      a = 3.1415926535897931 * (r * r);
      *c = 6.2831853071795862 * r;
      return a;
    }
    
    /*
     * Arguments    : double radius
     *                double *area
     *                double *circ
     * Return Type  : void
     */
    void multiOutputNonInlineCall(double radius, double *area, double *circ)
    {
      *area = circleMath(radius, circ);
    }
    
    /*
     * File trailer for multiOutputNonInlineCall.c
     *
     * [EOF]
     */
    

    输入参数

    全部折叠

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

    示例: coder.nonInlineCall(myFunction(arg1,arg2))

    示例: out = coder.nonInlineCall(myFunction)

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

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

    数据类型: function handle

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

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

    扩展功能

    全部展开

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

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

    版本历史记录

    在 R2024a 中推出