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