Enumerations represent a fixed set of named values. Enumerations help make your MATLAB® code
and generated C/C++ code more readable. For example, the generated
code can test equality with code such as if (x == Red)
instead
of using strcmp
.
For code generation, when you use enumerations, adhere to these restrictions:
For code generation, the enumeration class must derive from
one of these base types: int8
, uint8
, int16
, uint16
,
or int32
. For example:
classdef PrimaryColors < int32 enumeration Red(1), Blue(2), Yellow(4) end end
You can use the base type to control the size of an enumerated type in generated C/C++ code. You can:
Represent an enumerated type as a fixed-size integer that is portable to different targets.
Reduce memory usage.
Interface with legacy code.
Match company standards.
The base type determines the representation of the enumerated type in generated C/C++ code.
If the base type is int32
, the code generator
produces a C enumerated type. Consider the following MATLAB enumerated
type definition:
classdef LEDcolor < int32 enumeration GREEN(1), RED(2) end end
This enumerated type definition results in the following C code:
enum LEDcolor { GREEN = 1, RED }; typedef enum LEDcolor LEDcolor;
For built-in integer base types other than int32
,
the code generator produces a typedef
statement
for the enumerated type and #define
statements
for the enumerated values. Consider the following MATLAB enumerated
type definition:
classdef LEDcolor < int16 enumeration GREEN(1), RED(2) end end
typedef short LEDcolor; #define GREEN ((LEDcolor)1) #define RED ((LEDcolor)2)
The C type in the typedef
statement depends
on:
The integer sizes defined for the production hardware
in the hardware implementation object or the project settings. See coder.HardwareImplementation
.
The setting that determines the use of built-in C types or MathWorks® typedefs in the generated code. See Specify Data Types Used in Generated Code and How MATLAB Coder Infers C/C++ Data Types .
For code generation, you are restricted to the operations on enumerations listed in this table.
Operation | Example |
---|---|
assignment operator, | xon = LEDcolor.GREEN xoff = LEDcolor.RED |
relational operators, You cannot use | xon == xoff |
cast operation | double(LEDcolor.RED) |
indexing operation | m = [1 2] n = LEDcolor(m) p = n(LEDcolor.GREEN) |
control flow statements: if, switch, while | if state == sysMode.ON led = LEDcolor.GREEN; else led = LEDcolor.RED; end |
For code generation, you can use enumerations with these MATLAB toolbox functions: