coder.reservedName

Сгенерируйте код, который не использует заданные имена идентификатора

Описание

пример

coder.reservedName(name1,name2,...,nameN) резервирует идентификаторы name1,name2,...,nameN для использования в вашем пользовательском коде C/C++, чтобы объединяться с вашим сгенерированным кодом. Если вы помещаете эту директиву в свой код MATLAB®, предназначенный для генерации кода, сгенерированный код не содержит идентификаторы name1,name2,...,nameN, таким образом, предотвращающее столкновение имени с вашим пользовательским кодом.

Примеры

свернуть все

Предположим что идентификатор g обозначает и глобальную переменную в вашем коде MATLAB и локальную переменную в вашем пользовательском коде С, при помощи которого вы вызываете coder.ceval. По умолчанию сгенерированный код использует тот же идентификатор, который MATLAB использует для глобальной переменной. Но в этом случае такое использование в сгенерированном коде может вызвать столкновение имени с локальной переменной g в пользовательском коде. В этом примере показано, как дать генератору кода команду не использовать идентификатор g в сгенерированном коде.

Задайте функцию MATLAB callfoo это объявляет глобальную переменную g, вызывает внешнюю функцию C foo, и возвращает сумму g и значение, что foo возвращается. Вставьте 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™, на вкладке Code Appearance, устанавливает параметр Reserved names

Введенный в R2020b