Генератор кода производит типы данных на C/C++, которые соответствуют типам данных, которые вы используете в своем коде MATLAB®. Типы данных, которые сгенерированы, зависят от целевой платформы и компилятора. Генератор кода может произвести или встроенные типы данных C, такие как short
, long
, int
, и так далее, или пользовательские типы данных, заданные при помощи операторов C typedef
. По умолчанию генератор кода производит встроенные типы для автономного кода (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