Генератор кода производит типы данных на C/C++, которые соответствуют типам данных, которые вы используете в своем коде MATLAB®. Типы данных, которые сгенерированы, зависят от целевой платформы и компилятора. Генератор кода может произвести любой встроенные типы данных C, такие как short
, long
, int
, и так далее, или пользовательские типы данных заданы при помощи typedef
C операторы. По умолчанию генератор кода производит встроенные типы для автономного кода (lib, dll, или exe) и пользовательские типы для кода MEX. Чтобы использовать встроенные типы C, измените
DataTypeReplacement
свойство настройки генерации кода возражает или использует Приложение MATLAB Coder™. Для получения дополнительной информации смотрите, Задают Типы данных, Используемые в Сгенерированном коде.
Чтобы произвести пользовательские типы C/C++, генератор кода использует предопределенные типы данных в заголовочном файле tmwtypes.h
, расположенный в fullfile(matlabroot,'extern','include')
. Генератор кода может также произвести пользовательские типы данных на основе анализа вашего кода MATLAB. Пользовательские типы данных заданы в файлах rtwtypes.h
и myFunction_types.h
расположенный в директории генерации кода. myFunction
имя вашей функции верхнего уровня. Генератор кода не может произвести код для каждого типа данных, который существует в MATLAB. Смотрите Функции языка MATLAB, Поддерживавшие для Генерации кода C/C++.
Когда вы не используете встроенные типы данных C, генератор кода производит эти типы данных:
Тип данных MATLAB | Соответствующий Пользовательский Тип данных C/C++ |
---|---|
logical | boolean_T |
char | char_T |
string | rtString |
int8 | int8_T |
int16 | int16_T |
int32 | int32_T |
int64 | int64_T |
uint8 | uint8_T |
uint16 | uint16_T |
uint32 | uint32_T |
uint64 | uint64_T |
single | real32_T |
double | real_T |
complex | Смотрите составные типы. |
struct | Смотрите типы структуры. |
fi | Смотрите фиксированные точки. |
Когда переменная передается ссылкой, соответствующий пользовательский тип данных использует разыменовать оператор. Например, соответствующий пользовательский тип данных C/C++ для int8
когда передано ссылкой int8_T*
.
Динамически выделенные массивы сопоставляют с пользовательским emxArray_
ввод. Например, динамически выделенный char
массив сопоставляет с типом emxArray_char_T
. Динамически выделенный двойной массив сопоставляет с типом emxArray_real_T
. Динамическое выделение происходит, например, когда размер массивов не известен во время компиляции или когда вы создаете массив переменного размера при помощи coder.varsize
не задавая явные верхние границы. Для получения дополнительной информации о массивах переменного размера смотрите Использование C Массивы в Сгенерированных Функциональных Интерфейсах.
В MATLAB сложность задана как свойство типа данных. Эта таблица приводит предопределенные типы данных, которые генератор кода использует в сложных типах данных MATLAB.
Сложный тип данных MATLAB | Соответствующий Пользовательский Тип данных C/C++ |
---|---|
int8 | cint8_T |
int16 | cint16_T |
int32 | cint32_T |
int64 | cint64_T |
uint8 | cuint8_T |
uint16 | cuint16_T |
uint32 | cuint32_T |
uint64 | cuint64_T |
single | creal32_T |
double | creal_T |
Генератор кода задает каждое комплексное число как структуру с действительным re
компонента и мнимый
im
компонента. Например, смотрите
typedef
для creal32_T
от tmwtypes.h
:
typedef struct { real32_T re;/* Real component*/ real32_T im;/* Imaginary component*/ } creal32_T;
x
из типа creal32_T
. Сгенерированный код получает доступ к действительному компоненту как к x.re
и мнимый компонент как x.im
.Если ваша библиотека C/C++ требует различного представления, можно задать собственные версии составных типов MATLAB Coder, например, при помощи coder.cstructname
. Однако необходимо использовать имена re
для действительных компонентов и im
для мнимых компонентов в ваших определениях.
Для получения дополнительной информации смотрите Генерацию кода для Комплексных данных.
MATLAB Coder сопоставляет структуры с полем полем типов C/C++. Порядок полей структуры в определении MATLAB сохраняется. Чтобы управлять именем сгенерированного типа структуры C/C++ или предоставить определение, используют coder.cstructname
функция. Если вы не используете динамическое выделение памяти, массивы в структурах переводят в массивы одно размерности, не указатели. Для получения дополнительной информации смотрите Структуры.
numerictype
свойства fi
объект определяет свой тип данных C/C++. По умолчанию генератор кода пытается использовать встроенные типы C/C++. Однако можно принять решение использовать пользовательские типы данных C/C++ вместо этого. Следующая таблица показывает как Signedness
, WordLength
, и FractionLength
свойства определяют пользовательский тип данных C/C++. Пользовательский тип данных C/C++ является следующим большим целевым размером слова, который может сохранить значение фиксированной точки, на основе его размера слова. Знак целочисленного типа совпадает со знаком фиксированной точки.
Со знаком | Размер слова | Дробная длина | Соответствующий Пользовательский Тип данных C/C++ |
---|---|---|---|
1 | 8 | 7 | int8_T |
1 | 13 | 10 | int16_T |
1 | 16 | 15 | int16_T |
0 | 19 | 15 | uint32_T |
Программное обеспечение MATLAB Coder сопоставляет векторы символов MATLAB с символьными массивами C/C++. Эти символьные массивы не являются строками C/C++, потому что они не отключены пустым указателем. Если вы передаете вектор символов MATLAB внешнему коду C/C++, который ожидает строку C/C++, сгенерированный символьный массив C/C++ должен быть отключен пустым указателем. Чтобы сгенерировать отключенный пустым указателем символьный массив C/C++, добавьте нуль в конец вектора символов MATLAB. Например, ['sample text' 0]
. В противном случае сгенерированный код, который ожидает строку, может прекратить работать без ошибок компилятора или предупреждений.
Типы многословные являются пользовательскими типами, которые сгенерированы, когда целевой компьютер не может сохранить ваш тип данных MATLAB во встроенном типе C/C++. Типы многословные сгенерированы, когда структура C/C++ вводит, которые содержат массив целых чисел. Измерения массива зависят от размера самого широкого целочисленного типа на целевом компьютере.
Например, для 128-битной фиксированной точки, если самый широкий целочисленный тип на целевом компьютере составляет 32 бита, программное обеспечение генерирует структуру с массивом четырех 32-битных целых чисел.
typedef struct { unsigned int chunks[4]; } uint128m_T;
Если самым широким целочисленным типом на целевом компьютере является long
с размером 64 битов генератор кода производит структуру с массивом двух 64-битных длинных типов.
typedef struct { unsigned long chunks[2]; } uint128m_T;
Тип данных C/C++, сгенерированный от 64-битного целочисленного типа MATLAB, зависит от размеров целочисленных типов на целевом компьютере. Если встроенный тип, достаточно широкий, чтобы сохранить 64 бита, не существует, то 64-битный тип MATLAB Coder сопоставляет с пользовательским типом многословным.
coder.cstructname
| coder.opaque