メインコンテンツ

構造体および配列内の定数のコード生成

R2026b

コード ジェネレーターは次の場合に定数の構造体フィールドまたは配列要素を認識しません。

次のコードでは、コード ジェネレーターは構造体フィールド s.a および s.b が定数であると認識します。

function y = mystruct()
s.a = 3;
s.b = 5;
y = zeros(s.a,s.b);

構造体フィールドが制御構造内で代入される場合、コード ジェネレーターは定数フィールドを認識しません。この制限は定数要素をもつ配列にも適用されます。以下のコードについて考えます。

function y = mystruct(x)
s.a = 3;
if x > 1
    s.b = 4;
else
    s.b = 5;
end
y = zeros(s.a,s.b);

コード ジェネレーターは s.a および s.b が定数であると認識しません。可変サイズが有効の場合、y は可変サイズの配列として扱われます。可変サイズが無効の場合、コード ジェネレーターはエラーを報告します。

次のコードでは、コード ジェネレーターは a(1) が定数であると認識します。

function y = myarray()
a = zeros(1,3);
a(1) = 20;
y = coder.const(a(1));

次のコードでは、a(1) は非スカラー インデックスを使用して代入されているため、コード ジェネレーターは a(1) が定数であると認識しません。

function y = myarray()
a = zeros(1,3);
a(1:2) = 20;
y = coder.const(a(1));

定数と非定数の両方のフィールドをもつ出力構造体については、コード ジェネレーターは定数フィールドを認識しません。この制限は定数と非定数の要素をもつ配列にも適用されます。以下のコードについて考えます。

function y = mystruct_out(x)
s = create_structure(x);
y = coder.const(s.a);

function s = create_structure(x)
s.a = 10;
s.b = x;

create_structure は、1 つの定数フィールドと 1 つの非定数フィールドをもつ構造体 s を返すため、コード ジェネレーターは s.a が定数であると認識しません。coder.const は定数ではないため、s.a の呼び出しは失敗します。