Main Content

coder.reservedName

指定された識別子名を使用しないコードの生成

R2020b 以降

説明

coder.reservedName(name1,name2,...,nameN) は、識別子 name1,name2,...,nameN を生成コードと統合するカスタム C/C++ コードで使用するために予約します。コード生成用の MATLAB® コードにこの命令を配置すると、生成コードには識別子 name1,name2,...,nameN が含まれないため、カスタム コードとの名前の競合が回避されます。

すべて折りたたむ

識別子 g が、MATLAB コード内のグローバル変数と、coder.ceval を使用して呼び出すカスタム C コード内のローカル変数の両方を表すとします。既定では、生成コードは、MATLAB がグローバル変数に使用する識別子と同じものを使用します。しかし、この場合は、生成コードでのこのような用法により、カスタム コード内のローカル変数 g と名前の競合が発生する可能性があります。この例では、生成コードで識別子 g を使用しないようにコード ジェネレーターに指示する方法を示します。

グローバル変数 g を宣言して外部 C 関数 foo を呼び出し、gfoo の戻り値の和を返す MATLAB 関数 callfoo を定義します。coder.reservedName('g') 命令を挿入して、生成コードで識別子 g を使用しないようにコード ジェネレーターに指示します。

function u = callfoo(n)  %#codegen
% Reserve 'g' for use in the C function foo
coder.reservedName('g');

global g
u = int32(0);

coder.updateBuildInfo('addSourceFiles','foo.c');
coder.cinclude('foo.h');

u = coder.ceval('foo', n);
u = u + g;
end

関数 foo を C ヘッダー ファイル foo.h で宣言します。

int foo(int x);

関数 foo を C ソース ファイル foo.c で定義します。この関数は整数の入力を受け入れ、その整数の階乗を返します。

#include <stdio.h>
#include <stdlib.h>
#include "foo.h"

int foo(int x)
{
    int count;
    int g = 1;
    for (count = 1;count <= x;count++)
    {
        g = g*count;
    }
    
    return (g);
}

callfoo のスタティック ライブラリを生成します。入力をスカラー 32 ビット整数として指定します。

codegen -config:lib -global {'g', int32(2)} callfoo -args {int32(0)} -report

生成されたヘッダー ファイル callfoo_data.h を検査します。グローバル変数の名前が b_g に変更されています。

extern int b_g;

入力引数

すべて折りたたむ

生成コードで使用しない識別子名。文字ベクトルとして指定します。

例: 'myname1','myname2','myname3'

データ型: char

ヒント

  • 次のコード生成設定は、coder.reservedName と同じ機能を提供します。生成コードで使用しない識別子名を指定するには、次を行います。

    • コード構成オブジェクト内で ReservedNameArray プロパティを設定します。

    • あるいは、MATLAB Coder™ アプリの [コード外観] タブで、[予約名] パラメーターを設定します。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2020b で導入