exponenta event banner

coder.reservedName

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

Описание

пример

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

Примеры

свернуть все

Предположим, что идентификатор g обозначает как глобальную переменную в коде MATLAB, так и локальную переменную в пользовательском коде C, вызываемую с помощью 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™ на вкладке Внешний вид кода установите параметр Зарезервированные имена

Представлен в R2020b