メインコンテンツ

coder.inlineCall

生成されたコードで呼び出される関数をインライン化する

R2024a 以降

    説明

    out = coder.inlineCall(functionCall)functionCall を評価し、生成されたコードで呼び出される関数をインライン化します。functionCall は 1 つ以上の入力引数を受け取り、1 つの出力を返すことができます。MATLAB® コード内で coder.inlineCall を使用して、生成されたコードで、関数呼び出しを呼び出される関数の本体に置き換えます。

    インライン化により、関数呼び出しのオーバーヘッドがなくなり、生成された C/C++ コードをさらに最適化できます。ただし、インライン化で生成される C/C++ コードは大きく、複雑になることがあります。関数 coder.inlineCall は、呼び出される関数内の coder.inline (MATLAB Coder) 命令をオーバーライドします。

    関数 coder.inlineCall では、以下のインライン化はサポートされていません。

    • 再帰関数

    • parfor ループを含む関数

    • parfor ループから呼び出される関数

    [out1,...,outN] = coder.inlineCall(handle,arg1,...,argN) は、1 つ以上の入力引数をもつことができるハンドル handle を使用して関数を呼び出し、生成されたコードでその関数をインライン化します。指定された関数は複数の出力をもつことができます。

    すべて折りたたむ

    入力値の 2 乗を返し、命令 coder.inline("never") を含むローカル関数 local_NoInline を作成します。coder.inline("never") 命令をオーバーライドするために coder.inlineCall を使用して local_NoInline を呼び出すエントリポイント関数 useInlineCall を作成します。

    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.1
     * C/C++ source code generated on  : 13-Jul-2025 17:34:24
     */
    
    /* 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]
     */
    

    円の半径を入力として受け取り、2 つの出力 (円の面積と円周) を返すローカル関数 circleMath を作成します。coder.inlineCall を使用して circleMath の関数ハンドルを呼び出し、この関数をインライン化するようにコード ジェネレーターに指示するエントリポイント関数 multiOutputInlineCall を作成します。

    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.1
     * C/C++ source code generated on  : 13-Jul-2025 17:34:27
     */
    
    /* 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]
     */
    

    入力引数

    すべて折りたたむ

    生成されたコードで評価してインライン化する関数呼び出し。関数名と、必要に応じてかっこで囲んだ 1 つ以上の引数のコンマ区切りリストを続けて指定します。指定された関数は、最大で 1 つの出力引数を返すことができます。

    例: 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 で導入