Генератор кода производит типы данных в C/C + +, которые соответствуют типам данных, которые вы используете в MATLAB® код. Типы данных, которые генерируются, зависят от целевой платформы и компилятора. Генератор кода может производить любые встроенные типы данных C, такие как short
, long
, int
, и так далее, или пользовательские типы данных, заданные при помощи C typedef
операторы. По умолчанию генератор кода производит встроенные типы для автономного кода (lib, dll или exe) и пользовательские типы для кода MEX. Чтобы использовать встроенные типы C, измените DataTypeReplacement
свойство объекта строения генерации кода или используйте MATLAB Coder™ App.Для получения дополнительной информации смотрите Задать типы данных, используемые в Сгенерированном коде.
Чтобы создать пользовательские типы 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 | См. «Фиксированные точки». |
Когда переменная передается по ссылке, соответствующий пользовательский тип данных использует оператор dereference. Например, соответствующий пользовательский тип данных 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
функция. Если вы не используете динамическое выделение памяти, массивы в структурах переводятся в одномерные массивы, а не в указатели. Для получения дополнительной информации см. раздел Структуры.
The numerictype
свойства fi
объект определяет свой тип данных C/C + +. По умолчанию генератор кода пытается использовать встроенные типы C/C + +. Однако можно выбрать использование пользовательских типов данных C/C + +. Следующая таблица показывает, как Signedness
, WordLength
, и FractionLength
свойства определяют пользовательский тип данных C/C + +. Пользовательский тип данных C/C + + является следующим большим размером целевого слова, которое может хранить значение с фиксированной точкой, основанное на длине его слова. Знак целого типа совпадает со знаком типа с фиксированной точкой.
Signedness | Размер слова | Длина дроби | Соответствующий пользовательский тип данных 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