RKH
|
Specifies the assertion macros. More...
Files | |
file | rkhassert.h |
Specifies the assertion macros. | |
Macros | |
#define | RKH_ASSERT(exp) |
The RKH_ASSERT() macro is used to check expressions that ought to be true as long as the program is running correctly. More... | |
#define | RKH_ALLEGE(exp) RKH_ASSERT(exp) |
General purpose assertion that ALWAYS evaluates the exp argument and calls the RKH_ASSERT() macro if the exp evaluates to FALSE. More... | |
#define | RKH_ERROR() rkh_assert(m_name, __LINE__) |
Assertion that always calls the rkh_assert() callback if ever executed. More... | |
#define | RKH_REQUIRE(exp) RKH_ASSERT(exp) |
This macro checks the precondition. More... | |
#define | RKH_ENSURE(exp) RKH_ASSERT(exp) |
This macro checks the postcondition. More... | |
#define | RKH_INVARIANT(exp) RKH_ASSERT(exp) |
This macro is used to check a loop invariant. More... | |
#define | RKH_MODULE_NAME(__fname) static RKHROM char *const m_name = # __fname; |
This macro appears at the top of each C/C++ source file defining a name for that file. More... | |
#define | RKH_THIS_MODULE static RKHROM char *const m_name = __FILE__; |
This macro appears at the top of each C/C++ source file defining a name for that file, by means of FILE compiler directive. | |
Functions | |
void | rkh_assert (const char *const file, int line) |
Callback invoked in case the condition passed to RKH_ASSERT(), RKH_REQUIRE(), RKH_ENSURE(), RKH_ERROR(), or RKH_ALLEGE() evaluates to FALSE. More... | |
Specifies the assertion macros.
The assertions (RKH_ASSERT()
macro) are used to check expressions that ought to be true as long as the program is running correctly. It is a convenient way to insert sanity checks.
A number of philosophies can be employed when deciding where to use an RKH_ASSERT()
macro. Broadly speaking, the assertions only serve the purposes of catching bugs and helping documentation. Helping to document the code means that the statements inside the assertion tell the reader something he might not already know.
#define RKH_ASSERT | ( | exp | ) |
The RKH_ASSERT() macro is used to check expressions that ought to be true as long as the program is running correctly.
The assertions (RKH_ASSERT()
macro) are used to check expressions that ought to be true as long as the program is running correctly. It is a convenient way to insert sanity checks. A number of philosophies can be employed when deciding where to use an RKH_ASSERT()
macro. Broadly speaking, the assertions only serve the purposes of catching bugs and helping documentation. Helping to document the code means that the statements inside the assertion tell the reader something he might not already know.
[in] | exp | expression to be checked. |
Definition at line 129 of file rkhassert.h.
#define RKH_ALLEGE | ( | exp | ) | RKH_ASSERT(exp) |
General purpose assertion that ALWAYS evaluates the exp argument and calls the RKH_ASSERT() macro if the exp evaluates to FALSE.
Definition at line 151 of file rkhassert.h.
#define RKH_ERROR | ( | ) | rkh_assert(m_name, __LINE__) |
Assertion that always calls the rkh_assert() callback if ever executed.
Definition at line 163 of file rkhassert.h.
#define RKH_REQUIRE | ( | exp | ) | RKH_ASSERT(exp) |
This macro checks the precondition.
This macro is equivalent to RKH_ASSERT() macro, except the name provides a better documentation of the intention of this assertion.
Definition at line 180 of file rkhassert.h.
#define RKH_ENSURE | ( | exp | ) | RKH_ASSERT(exp) |
This macro checks the postcondition.
This macro is equivalent to RKH_ASSERT() macro, except the name provides a better documentation of the intention of this assertion.
Definition at line 191 of file rkhassert.h.
#define RKH_INVARIANT | ( | exp | ) | RKH_ASSERT(exp) |
This macro is used to check a loop invariant.
This macro is equivalent to RKH_ASSERT() macro, except the name provides a better documentation of the intention of this assertion.
Definition at line 202 of file rkhassert.h.
#define RKH_MODULE_NAME | ( | __fname | ) | static RKHROM char *const m_name = # __fname; |
This macro appears at the top of each C/C++ source file defining a name for that file.
[in] | __fname | file name where the assertion failed |
Definition at line 111 of file rkhfwk_module.h.
void rkh_assert | ( | const char *const | file, |
int | line | ||
) |
Callback invoked in case the condition passed to RKH_ASSERT(), RKH_REQUIRE(), RKH_ENSURE(), RKH_ERROR(), or RKH_ALLEGE() evaluates to FALSE.
If the expression evaluates to FALSE (0), the function rkh_assert() will be invoked, typically halting the program in some way and storing or reporting the error code. Once the rkh_assert() callback has stored or reported the error, it must decide on the system's next action. One option is:
The policy chooses will be largely determined by the nature of product. If the system is running with a source level debugger, place a breakpoint within. Another option is to trigger a software reset and attempt to run the system again.
Also a unique identifier that can be reported from the field, easing the investigation of the problem. Therefore, the error code could be composed of the software version number, file number (.c file), line number of assertion, and other information. A number is easier to fill in on a report form and easier to store in NVRAM.
[in] | file | file name where the assertion failed |
[in] | line | line number at which the assertion failed |