代码生成器生成C/ c++中的数据类型,与您在MATLAB中使用的数据类型相对应®代码。生成的数据类型取决于目标平台和编译器。代码生成器可以生成内置的C数据类型,例如短
,长
,int
,等等,或者使用C类型定义
语句。默认情况下,代码生成器为独立代码(lib、dll或exe)生成内置类型,为MEX代码生成自定义类型。要使用内置的C类型,请修改DataTypeReplacement
属性或使用MATLAB编码器™有关更多信息,请参见指定生成代码中使用的数据类型.
为了生成定制的C/ c++类型,代码生成器在头文件中使用预定义的数据类型tmwtypes.h
,位于fullfile (matlabroot“外来的”,“包括”)
.代码生成器还可以基于对MATLAB代码的分析生成自定义数据类型。自定义数据类型在文件中定义rtwtypes.h
和myFunction_types.h
位于代码生成目录中。myFunction
是顶级函数的名称。代码生成器不能为MATLAB中存在的每一种数据类型生成代码。看到支持C/ c++代码生成的MATLAB语言特性万博1manbetx.
当你不使用内置的C数据类型时,代码生成器会生成以下数据类型:
MATLAB数据类型 | 对应的自定义C/ c++数据类型 |
---|---|
逻辑 |
boolean_T |
字符 |
char_T |
字符串 |
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 |
单 |
real32_T |
双 |
real_T |
复杂的 |
看到复杂类型. |
结构体 |
看到结构类型. |
fi |
看到定点类型. |
当通过引用传递变量时,相应的自定义数据类型使用解引用操作符。例如,对应的自定义C/ c++数据类型int8
当通过引用传递时int8_T *
.
动态分配的数组映射到自定义数组emxArray_
类型。例如,动态分配字符
数组映射到类型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 |
单 |
creal32_T |
双 |
creal_T |
代码生成器将每个复杂值定义为带有实际组件的结构再保险
和虚分量即时通讯
.例如,请参见类型定义
为creal32_T
从tmwtypes.h
:
typedef struct {real32_T re;/*实组件*/ real32_T im;/*虚组件*/}creal32_T;
x
类型的creal32_T
.生成的代码访问真实的组件x.re
虚分量是x.im
.
如果你的C/ c++库需要不同的表示,你可以定义你自己的版本MATLAB编码器例如,通过使用coder.cstructname
.然而,你必须使用的名称再保险
对于实分量和即时通讯
对于定义中的虚分量。
有关更多信息,请参见复杂数据的代码生成.
MATLAB编码器逐个字段地将结构映射到C/ c++类型。在MATLAB定义中,结构字段的顺序被保留下来。要控制生成的C/ c++结构类型的名称,或提供定义,请使用coder.cstructname
函数。如果不使用动态内存分配,结构中的数组会转换为一维数组,而不是指针。有关更多信息,请参见结构.
的numerictype
的属性fi
对象确定其C/ c++数据类型。默认情况下,代码生成器尝试使用内置的C/ c++类型。但是,您可以选择使用定制的C/ c++数据类型。下表显示了如何Signedness
,字
,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编码器软件将MATLAB字符向量映射到C/ c++字符数组。这些字符数组不是C/ c++字符串,因为它们不是以空结尾的。如果将MATLAB字符向量传递给需要C/ c++字符串的外部C/ c++代码,则生成的C/ c++字符数组必须以null结尾。要生成以null结尾的C/ c++字符数组,请在MATLAB字符向量的末尾添加一个0。例如,['示例文本' 0]
.否则,生成的期望字符串的代码将在没有编译器错误或警告的情况下停止工作。
多字类型是自定义类型,当目标硬件不能将MATLAB数据类型存储在内置的C/ c++类型时生成。多字类型生成为包含整型数组的C/ c++结构类型。数组的维数取决于目标硬件上最宽的整数类型的大小。
例如,对于128位的定点类型,如果目标硬件上最宽的整数类型是32位的,则软件生成一个包含4个32位整数数组的结构。
Typedef struct{无符号int块[4];} uint128m_T;
如果目标硬件上最宽的整数类型是长
对于64位的大小,代码生成器将生成一个具有两个64位长类型数组的结构。
Typedef struct{无符号长块[2];} uint128m_T;
由64位整数MATLAB类型生成的C/ c++数据类型取决于目标硬件上整数类型的大小。如果没有足够宽的内置类型来存储64位,则64位MATLAB编码器类型映射到自定义多字类型。
coder.cstructname
|coder.opaque