MATLAB® Coder™ enables you to either generate C or C++ code. The code generator produces C code by default. Generated C++ code can use functionality not available in the C language that can make the C++ code more readable and easier to use.
To generate C++ code, follow the same overall workflow steps that you use to generate C code. For example, see Generate C Code at the Command Line. Select the C++ language option from the command line, or with a code generation configuration setting, or from the MATLAB Coder app.
Suppose that you want to generate C++ code for a function foo
that accepts zero inputs:
From the command line, use the -lang:c++
specifier.
This specifier provides a quick and easy way to generate C++ code. For
example, to generate a C++ static library and C++ source code for
foo
, enter:
codegen -config:lib -lang:c++ foo
In the configuration object, set the TargetLang
parameter to C++. For example, to generate a C++ dynamic library,
enter:
cfg = coder.config('dll'); cfg.TargetLang = 'C++'; codegen -config cfg foo
From the app, at the Generate Code step, select the C++ language button.
To learn about code generation that utilizes key C++ language features, refer to these help topics:
Goal | More Information |
Generate C++ classes for classes in your MATLAB code. | |
Generate entry-point functions as methods in a C++ class. | |
Generate C++ namespaces for MATLAB packages. Place all generated code in a namespace that you specify. Place all code generated for MathWorks® code in a namespace that you specify. | |
Pass dynamically allocated arrays between your custom C++
code and the generated code. The generated C++ code implements
such arrays by using the | Use Dynamically Allocated C++ Arrays in the Generated Function Interfaces |
These examples illustrate the use of these functionalities:
If you separately generate C and C++ code for the same MATLAB function, and inspect the generated source code, then there are implementation differences. These are some notable differences:
The generated C++ code contains overloaded functions or methods that have the same name but support multiple signatures. The C language does not support overloading of functions.
The generated C++ code reuses the same identifier name across different
namespace hierarchies. For example, the same type name
myType
can appear in two different namespaces
hierarchies with top-level namespaces myNamespace_1
and
myNamespace_2
. The C language does not support
namespaces and such reuse of identifier names.
In generated C code, the function headers contain #ifdef
__cplusplus
include guards that specify the extern
"C"
identifier for the generated C functions. The compiler and
linker use these identifiers in building C code as part of a C++
project.
Generated C++ code uses .cpp
file extensions for the
C++ files and .h
extensions for the header files.
Generated C code uses .c
and .h
extensions.
The generated C++ code uses some C++ casts, like
static_cast
, which are more explicit than the casting
syntax in C.
The generated code defines values for Inf
and
NaN
based on different mechanisms for C++ and
C.
Generated C++ code uses the custom data types as described in Mapping MATLAB Types to Types in Generated Code.
Generated C++ code uses different libraries than generated C code. For example, the default standard math library for C++ and C is described in Change the Standard Math Library.