Loading...
Searching...
No Matches
assert.h File Reference

POSIX.1-2008 compliant version of the assert macro. More...

Detailed Description

POSIX.1-2008 compliant version of the assert macro.

Author
Oliver Hahm olive.nosp@m.r.ha.nosp@m.hm@in.nosp@m.ria..nosp@m.fr
René Kijewski rene..nosp@m.kije.nosp@m.wski@.nosp@m.fu-b.nosp@m.erlin.nosp@m..de
Martine Lenders m.len.nosp@m.ders.nosp@m.@fu-b.nosp@m.erli.nosp@m.n.de

Definition in file assert.h.

#include <stdint.h>
+ Include dependency graph for assert.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

#define DEBUG_ASSERT_VERBOSE
 Activate verbose output for assert() when defined.
 
#define DEBUG_ASSERT_BREAKPOINT
 Activate breakpoints for assert() when defined.
 
#define __NORETURN
 hidden (__) NORETURN definition
 
#define assert(cond)   (_likely(cond) ? (void)0 : _assert_failure(__FILE__, __LINE__))
 abort the program if assertion is false
 
#define static_assert(cond, ...)    { enum { static_assert_failed_on_div_by_0 = 1 / (!!(cond)) }; }
 static_assert for c-version < c11
 
__NORETURN void _assert_failure (const char *file, unsigned line)
 Function to handle failed assertion.
 

Macro Definition Documentation

◆ __NORETURN

#define __NORETURN

hidden (__) NORETURN definition

Definition at line 79 of file assert.h.

◆ assert

#define assert (   cond)    (_likely(cond) ? (void)0 : _assert_failure(__FILE__, __LINE__))

abort the program if assertion is false

If the macro NDEBUG was defined at the moment <assert.h> was last included, the macro assert() generates no code, and hence does nothing at all.

Otherwise, the macro assert() prints an error message to standard error and terminates the application by calling core_panic().

The purpose of this macro is to help programmers find bugs in their programs.

With DEBUG_ASSERT_VERBOSE defined this will print also the file, the line and the function this assertion failed in.

If NDEBUG and DEBUG_ASSERT_VERBOSE are not defined, a failed assertion generates output similar to:

0x89abcdef
*** RIOT kernel panic:
FAILED ASSERTION.

...

Where 0x89abcdef is an address. This address can be used with tools like addr2line (or e.g. arm-none-eabi-addr2line for ARM-based code), objdump, or gdb (with the command info line *(0x89abcdef)) to identify the line the assertion failed in.

If the backtrace module is enabled (and implemented for architecture in use) a backtrace will be printed in addition to the location of the failed assertion.

If DEBUG_ASSERT_BREAKPOINT is defined, the execution will stop on a failed assertion instead of producing the above output. If the architecture defines the macro DEBUG_BREAKPOINT, a breakpoint is inserted and the execution is stopped directly in the debugger. Otherwise the execution stops in an endless while loop.

See also
http://pubs.opengroup.org/onlinepubs/9699919799/functions/assert.html

Definition at line 137 of file assert.h.

◆ DEBUG_ASSERT_BREAKPOINT

#define DEBUG_ASSERT_BREAKPOINT

Activate breakpoints for assert() when defined.

Without this macro defined the assert() macro will just print some information about the failed assertion, see assert and DEBUG_ASSERT_VERBOSE. If DEBUG_ASSERT_BREAKPOINT is defined, the execution will stop on a failed assertion instead of producing the output. If the architecture defines the macro DEBUG_BREAKPOINT, a breakpoint is inserted and the execution is stopped directly in the debugger. Otherwise the execution stops in an endless while loop.

Definition at line 60 of file assert.h.

◆ DEBUG_ASSERT_VERBOSE

#define DEBUG_ASSERT_VERBOSE

Activate verbose output for assert() when defined.

Without this macro defined the assert() macro will just print the address of the code line the assertion failed in. With the macro defined the macro will also print the file, the code line and the function this macro failed in.

To define just add it to your CFLAGS in your application's Makefile:

CFLAGS += -DDEBUG_ASSERT_VERBOSE

Definition at line 46 of file assert.h.

◆ static_assert

#define static_assert (   cond,
  ... 
)     { enum { static_assert_failed_on_div_by_0 = 1 / (!!(cond)) }; }

static_assert for c-version < c11

Generates a division by zero compile error when cond is false

Definition at line 155 of file assert.h.

Function Documentation

◆ _assert_failure()

__NORETURN void _assert_failure ( const char *  file,
unsigned  line 
)

Function to handle failed assertion.

Note
This function was introduced for memory size optimization
Warning
this function NEVER returns!
Parameters
[in]fileThe file name of the file the assertion failed in
[in]lineThe code line of file the assertion failed in