Mapping MATLAB Types to Types in Generated Code - MATLAB & Simulink (original) (raw)

The code generator produces data types in C/C++ that correspond to the data types that you use in your MATLAB® code. The data types that are generated depend on the target platform and compiler. The code generator can produce either built-in C data types, such asshort, long, int, and so on, or custom data types defined by using C typedef statements. By default, the code generator produces built-in types for standalone code (lib, dll, or exe) and custom types for MEX code. To instruct the code generator to use built-in C types, use one of these approaches:

To produce custom C/C++ types, the code generator uses predefined data types in the header file tmwtypes.h, located infullfile(matlabroot,'extern','include'). The code generator can also produce custom data types based on analysis of your MATLAB code. Custom data types are defined in the files rtwtypes.h andmyFunction_types.h located in the code generation directory.myFunction is the name of your top-level function. The code generator cannot produce code for every data type that exists within MATLAB. See MATLAB Language Features Supported for C/C++ Code Generation.

When you do not use built-in C data types, the code generator produces these data types:

MATLAB Data Type Corresponding Custom C/C++ Data Type
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 See Complex Types.
struct See Structure Types.
fi See Fixed-Point Types.

When a variable is passed by reference, the corresponding custom data type uses the dereference operator. For example, the corresponding custom C/C++ data type forint8 when passed by reference is int8_T*.

Dynamically allocated arrays map to a custom emxArray_ type. For example, a dynamically allocated char array maps to a type ofemxArray_char_T. A dynamically allocated double array maps to the typeemxArray_real_T. Dynamic allocation occurs, for example, when array size is not known at compile time or when you create a variable-size array by usingcoder.varsize without specifying explicit upper bounds. For more information on variable-size arrays, see Use Dynamically Allocated C Arrays in the Generated Function Interfaces.

Complex Types

In MATLAB, complexity is defined as a property of a data type. This table lists the predefined data types that the code generator uses for MATLAB complex data types.

MATLAB Complex Data Type Corresponding Custom C/C++ Data Type
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

The code generator defines each complex value as a structure with a real componentre and an imaginary component im. For example, see thetypedef for creal32_T fromtmwtypes.h:

typedef struct { real32_T re;/* Real component*/ real32_T im;/* Imaginary component*/ } creal32_T;

Suppose you define a variable x of type creal32_T. The generated code accesses the real component as x.re and the imaginary component asx.im.

If your C/C++ library requires a different representation, you can define your own versions of MATLAB Coderâ„¢ complex types, for example, by using coder.cstructname. However, you must use the names re for the real components and im for the imaginary components in your definitions.

For more information, see Code Generation for Complex Data.

Structure Types

MATLAB Coder maps structures to C/C++ types field-by-field. The order of the structure fields in the MATLAB definition is preserved. To control the name of the generated C/C++ structure type, or provide a definition, use the coder.cstructname function. If you are not using dynamic memory allocation, arrays in structures translate into single-dimension arrays, not pointers. For more information, see Structures.

Fixed-Point Types

The numerictype properties of a fi object determine its C/C++ data type. By default, the code generator tries to use built-in C/C++ types. However, you can choose to use custom C/C++ data types instead. The following table shows how the Signedness, WordLength, andFractionLength properties determine the custom C/C++ data type. The custom C/C++ data type is the next larger target word size that can store the fixed-point value, based on its word length. The sign of the integer type matches the sign of the fixed-point type.

Signedness Word Length Fraction Length Corresponding Custom C/C++ Data Type
1 8 7 int8_T
1 13 10 int16_T
1 16 15 int16_T
0 19 15 uint32_T

Character Vectors

The MATLAB Coder software maps MATLAB character vectors to C/C++ character arrays. These character arrays are not C/C++ strings because they are not null-terminated. If you pass a MATLAB character vector to external C/C++ code that expects a C/C++ string, the generated C/C++ character array must be null-terminated. To generate a null-terminated C/C++ character array, append a zero to the end of the MATLAB character vector. For example, ['sample text' 0]. Otherwise, generated code that expects a string can stop working without compiler errors or warnings.

Multiword Types

Multiword types are custom types that are generated when the target hardware cannot store your MATLAB data type in a built-in C/C++ type. Multiword types are generated as C/C++ structure types that contain an array of integers. The array dimensions depend on the size of the widest integer type on the target hardware.

For example, for a 128-bit fixed-point type, if the widest integer type on the target hardware is 32-bits, the software generates a structure with an array of four 32-bit integers.

typedef struct { unsigned int chunks[4]; } uint128m_T;

If the widest integer type on the target hardware is a long with a size of 64-bits, the code generator produces a structure with an array of two 64-bit long types.

typedef struct { unsigned long chunks[2]; } uint128m_T;

The C/C++ data type generated from a 64-bit integer MATLAB type depends on the sizes of the integer types on the target hardware. If a built-in type wide enough to store 64-bits does not exist, then the 64-bit MATLAB Coder type maps to a custom multiword type.

See Also

coder.cstructname | coder.opaque

Topics