2016-09-03 03:54:16 +08:00
|
|
|
.. _cxx_support_v2:
|
|
|
|
|
|
|
|
C++ Support for Applications
|
|
|
|
############################
|
|
|
|
|
|
|
|
The kernel supports applications written in both C and C++. However, to
|
|
|
|
use C++ in an application you must configure the kernel to include C++
|
|
|
|
support and the build system must select the correct compiler.
|
|
|
|
|
|
|
|
The build system selects the C++ compiler based on the suffix of the files.
|
|
|
|
Files identified with either a **cxx** or a **cpp** suffix are compiled using
|
|
|
|
the C++ compiler. For example, :file:`myCplusplusApp.cpp` is compiled using C++.
|
|
|
|
|
|
|
|
The kernel currently provides only a subset of C++ functionality. The
|
|
|
|
following features are *not* supported:
|
|
|
|
|
|
|
|
* Dynamic object management with the **new** and **delete** operators
|
2017-09-21 01:50:09 +08:00
|
|
|
* :abbr:`RTTI (runtime type information)`
|
2016-09-03 03:54:16 +08:00
|
|
|
* Exceptions
|
|
|
|
* Static global object destruction
|
|
|
|
|
|
|
|
While not an exhaustive list, support for the following functionality is
|
|
|
|
included:
|
|
|
|
|
|
|
|
* Inheritance
|
|
|
|
* Virtual functions
|
|
|
|
* Virtual tables
|
|
|
|
* Static global object constructors
|
|
|
|
|
|
|
|
Static global object constructors are initialized after the drivers are
|
|
|
|
initialized but before the application :c:func:`main()` function. Therefore,
|
|
|
|
use of C++ is restricted to application code.
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
Do not use C++ for kernel, driver, or system initialization code.
|