The $declare ${<model-item>}
directive requests generating a declaration of the <model-item>
specified between the parentheses. QM can generate declarations for the following item types:
In C, the directive $declare ${<Class>}
generates the C "class" declaration, which consists of a C struct
with all the attributes of the class and associated C functions for all the operations (see also Key Concept: Object-Oriented Programming in C↑).
Ship
in the example above, contains also the state machine code. This code is specific to the state machine implementation strategy, which in this case is based on the QActive
base class from the "QP/C framework"↑.If the $declare ${<Class>}
directive is used in a file scope (inside a .c
file), the declaration generates function prototypes with the static
keyword, as shown in the code generated by the directive $declare ${AOs::Ship}
for the class Ship
shown in the screen shot above:
static
keyword for all variables and functions declared at file scope is mandated by the MISRA-C:2012 Rule-8.8 (Required)↑.In C++, the directive $declare ${<class>}
generates the C++ class declaration. For example, the code snippet below shows the code generated by the directive $declare ${AOs::Ship}
for the class AOs::Ship
shown in the screen shot above:
Ship
in the example above, contains also the state machine members. These members are specific to the state machine implementation strategy, which in this case is based on the QP::QActive
base class from the "QP/C++ framework"↑.Free attribute is an attribute (variable) declared in a package outside of any class. The $declare ${<free-attribute>}
directive requests generating a declaration of the <free-attribute>
specified between the parentheses.
The following code snippet shows the C code generated by the $declare ${AOs::AO_Ship}
code-generation directive:
The following code snippet shows the C++ code generated by the $declare ${AOs::AO_Ship}
code-generation directive. Please note the C++ namespace generated around the variable. This is because the enclosing package AOs
provide the namespace GAME
:
Free operation is an operation (function) declared in a package outside of any class. The $declare ${<free-opeation>}
> directive requests generating a declaration of the <free-operation>
specified between the parentheses.
The following code snippet shows the C code generated by the $declare ${AOs::do_bitmaps_overlap}
code-generation directive:
The following code snippet shows the C++ code generated by the $declare ${AOs::do_bitmaps_overlap}
code-generation directive. Please note the C++ namespace generated around the function. This is because the enclosing package AOs
provides the namespace GAME
:
The $declare ${<package>}
directive requests generating a recursive declaration of all classes, free attributes, and free operations in the <package>
, as described in the sections above. If a package contains other packages, these packages are recursively declared, as described in the first sentence.